C语言中整型变量的内存存储形式

本文介绍C语言中整型变量在内存中的存储形式。主要分析二进制和十六进制的形式。

示例代码如下:

 

#include 
#include 
#include 

int main()
{
    int a = -7;
    char string_2[35] = "";
    char string_16[35] = "";

    /* 打印出系统中int类型所占的字节数 */ 
    printf("sizeof(a) is %d\n", sizeof(a));
    printf("sizeof(int) is %d\n", sizeof(int));
    
    /* string_2中存储整型变量a的二进制表达形式 */ 
    itoa(a, string_2, 2);
    printf("integer a = %d\nbinary a = %s\n", a, string_2);
    printf("length of string_2 a is %d.\n", strlen(string_2));
    
    /* string_16中存储整型变量a的十六进制表达形式 */ 
    itoa(a, string_16, 16);
    printf("integer a = %d\nHexadecimal a = %s\n", a, string_16);
    printf("length of string_16 a is %d.\n", strlen(string_16));
    
    system("pause");
    
    return 0;
}

上述代码的运行结果如下:

 

 

sizeof(a) is 4
sizeof(int) is 4
integer a = -7
binary a = 11111111111111111111111111111001
length of string_2 a is 32.
integer a = -7
Hexadecimal a = fffffff9
length of string_16 a is 8.

从上述代码及其运行结果能够看出:

 

a)-7对应内存中的二进制值为11111111111111111111111111111001;对应的十六进制值为fffffff9,通过对二进制值进行求补码的操作:

1. 除符号位之外,进行取反操作:11111111111111111111111111110110;

2. 再加1操作:1111 1111 1111 1111 1111 1111 1111 0111,此值为原码,对应的数值是-7。

通过上述运算,证明了-7在内存中是以二进制补码的形式进行存储的。而十六进制仅仅是对二进制的补码进行了整合,同样是以补码的形式进行存储的。

b)-7的补码 1111 1111 1111 1111 1111 1111 1111 1001 中,前面28位都是符号位,只有最后4位是数值位。在进行运算时,把符号位标出来有利于更清晰地进行运算和理解原码与补码的关系。

你可能感兴趣的:(C/C++语言)