- 3.1
- #include
- int main()
- {
- char a = -128;
- printf("%u\n",a);
- return 0;
- }
-
- 3.2
- #include
- int main()
- {
- char a = 128;
- printf("%u\n",a);
- return 0;
- }

上图是3.1的答案,在分析3.1之前我们首先要明白一个东西, char的取值范围。

3.1
以上是-128的原码、反码、补码,因为是char类型我们需要进行从右到左的截断。

截断后因为需要打印成%u也就是打印成无符号整形,所以进行整形提升,因为截断后符号位是1,又因为是char类型,属于是有符号类型,所以看符号位进行补充,所以补1。
![]()
而补完后是补码,但是以%u形式打印无符号进行打印,因为是无符号,所以没有原反补的概念,所以直接打印这一串得出结果。
3.2

最后的过程和结果都和3.1一样