C语言整型在内存中的存储练习题详解3(Detailed explanation 3 of the practice questions of the storage in memory for c language )

 

C语言整型在内存中的存储 练习3 —— 说明以下代码输出结果

1 #define _CRT_SECURE_NO_WARNINGS 1
2 #include <stdio.h>
3 
4 int main()
5 {
6     char a = 128;
7     printf("%u\n", a);
8     return 0;
9 }

对于这一道题,可以用和 练习题2 一样的解法去求解,然后你会发现他们的结果是一样的,还有另一种解法,就是借助 C语言必备知识点2 —— 理解char类型取值范围定义 中的signed char 圆轴表视图来理解这部分内容。

我们先来看看 signed char 的圆轴表示图:

通过这个圆轴表示图,我们可以看出,char的取值范围中是没有128的,但是在数值上可以看出 128=127+1,而在轴上可以看出127+1= -128,所以可以知道128的值和-128的结果是一样的。

 

或者可以从另一方面来看,因为参考-128 在内存中的存储形式,即二进制补码:

-128 原码:10000000 00000000 00000000 10000000    (最高位-1表示负数,其他位表示128)

-128 反码:11111111 11111111 11111111 01111111    (最高位不变,其他位按位取反)

-128 补码:11111111 11111111 11111111 10000000    (反码+1)

我们知道当把 -128 存放到 char 类型中的时候,得到的值是10000000(0x80),由下图也可以看出

 那我们看圆轴图中的二进制 10000000 其实就是十进制 -128 也可以知道,char a=128 在内存中的补码就是 -128 在内存中的补码,所以 char a=128 和 char a=-128 以 %u 打印的结果也应该是一样的。

 

以上知识点来自:https://www.bilibili.com/video/BV1q54y1q79w?p=29

posted @ 2022-05-18 15:46  ttweixiao9999  阅读(20)  评论(0编辑  收藏  举报