您的位置:首页 > 编程语言 > C语言/C++

C语言的整型数据的溢出

2018-01-21 17:37 232 查看
本文介绍C语言中的整型数据的溢出情况。
示例代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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既代表了符号位,也代表了数值位
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据溢出