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

posted @ 2022-05-23 10:12  ttweixiao9999  阅读(24)  评论(0编辑  收藏  举报