printf打印的结果是什么呢?
内存中存放的是补码:
a;11111111
b;11111111
c;11111111
得到补码后由于是%d打印的是整形,所以会发生整形提升:
C语言整形提升:
①有符号:第一位为0,前面补0,第一位为1,前面补一。
②无符号:前面补0。
a;1111111111111111111111111111111111111
b;1111111111111111111111111111111111111
c;00000000000000000000000011111111
打印的时候是打印源码:
正整数:原、补、码一样;
负整数
原码:(本身)
补码:(除符号位,0改为1,1改为0)
反码:(补码+1)
可以说,只有负整数才有:原码、反码、补码的概念
a;100000000000000000000000000001
b;100000000000000000000000000001
c;0000000000000000000000001111111
所以a=-1,b=-1,c=255