问题如下 :
请问代码的输出结果是
#include<stdio.h>
char a = -128;
printf("%u",a);
答案:
解析:
1、%u意思是打印十进制无符号整数。
2、-128存入a中发生截断,变为10000000。打印时,发生整形提升,由于char是有符号型,补充原符号位,变成111111111111111111111111100000000(补码),由于打印类型是%u,此时编译器认为这是一个无符号数,那么补码反码原码相同,直接输出,转化为十进制为4294967168。
3、补位时,看原来的类型(有符号char),不要被%u影响以为补充0。%u在最终的打印阶段发挥作用。