C语言整型在内存中的存储练习题详解5(Detailed explanation 5 of the practice questions of the storage in memory for c language )
C语言整型在内存中的存储 练习5 —— 说明以下代码输出结果
1 #define _CRT_SECURE_NO_WARNINGS 1
2 #include <stdio.h>
3
4 int main()
5 {
6 unsigned int i;
7 for (i = 9; i >= 0; i--)
8 {
9 printf("%u\n", i);
10 }
11 return 0;
12 }
代码解说:
因为 i 是无符号数,那就说明最小数是0,因为无符号数没有符号位,所以没有负数的概念,所以对于无符号数来说,它的取值一定是大于等于0的,那么就会导致判断条件 i >= 0 恒成立,从而导致死循环。
为了更好的看清楚代码的执行,可以通过加上停顿函数让计算机延时方便查看结果,添加延时后的代码如下:
1 #define _CRT_SECURE_NO_WARNINGS 1
2 #include <stdio.h>
3 #include <Windows.h>
4
5 int main()
6 {
7 unsigned int i;
8 for (i = 9; i >= 0; i--)
9 {
10 printf("%u\n", i);
11 Sleep(100); // 暂停100ms
12 }
13 return 0;
14 }
代码运行结果:
后面的数字会很大是因为 0-1=-1,而 -1 是的二进制补码是 32 个全 1 的值,那把 32 个全 1 当作无符号数来算,原码也是 32 个全 1,那就算出来的数就是 4,294,967,295(可以通过计算器算的)
以上知识点来自:https://www.bilibili.com/video/BV1q54y1q79w?p=30&spm_id_from=pageDriver