C语言的整型数据的溢出

本文介绍C语言中的整型数据的溢出情况。

示例代码如下:

 

#include 
#include 
#include 

int main()
{
    int a = 2147483647;
    int b = 0;
    char string[35] = "";
    
    b = a + 1;
    
    /* 打印出系统中int类型所占的字节数 */ 
    printf("sizeof(a) is %d\n", sizeof(a));
    printf("sizeof(int) is %d\n", sizeof(int));
    
    /* string中存储整型变量b的二进制表达形式 */ 
    itoa(b, string, 2);
    printf("integer b = %d\nbinary b = %s\n", b, string);
    printf("length of string b is %d.\n", strlen(string));
    
    system("pause");
    
    return 0;
}

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

 

 

sizeof(a) is 4
sizeof(int) is 4
integer b = -2147483648
binary b = 10000000000000000000000000000000
length of string b is 32.

从上述代码和运行结果,分析总结如下:

 

1)当前编译器为int类型数据分配了4个字节(对应32比特位),所以有符号int类型变量a和b的取值范围是-2147483648到2147483647,所以当a取值2147483647,再加1时,就会出现“溢出”的情况,其结果b发生了反转,变成了-2147483648。a和b的二进制表示如下:

a: 0111 1111 1111 1111 1111 1111 1111 1111 (共32位)

b: 1000 0000 0000 0000 0000 0000 0000 0000 (共32位)

上述是a、b的二进制补码形式(计算机中存储的都是二进制的补码形式)。

2)从b的十进制数值以及二进制补码形式可以知道,最高位1既代表了符号位,也代表了数值位

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