C语言的整型数据的溢出

布满荆棘的人生 2022-06-01 05:23 370阅读 0赞

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

示例代码如下:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main()
  5. {
  6. int a = 2147483647;
  7. int b = 0;
  8. char string[35] = "";
  9. b = a + 1;
  10. /* 打印出系统中int类型所占的字节数 */
  11. printf("sizeof(a) is %d\n", sizeof(a));
  12. printf("sizeof(int) is %d\n", sizeof(int));
  13. /* string中存储整型变量b的二进制表达形式 */
  14. itoa(b, string, 2);
  15. printf("integer b = %d\nbinary b = %s\n", b, string);
  16. printf("length of string b is %d.\n", strlen(string));
  17. system("pause");
  18. return 0;
  19. }

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

  1. sizeof(a) is 4
  2. sizeof(int) is 4
  3. integer b = -2147483648
  4. binary b = 10000000000000000000000000000000
  5. 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既代表了符号位,也代表了数值位

发表评论

表情:
评论列表 (有 0 条评论,370人围观)

还没有评论,来说两句吧...

相关阅读