char 类型(8个bit)的数据如果用 int 类型(32个比特位)来定义则会发生截断
反之则会整型提升。
如何进行整型提升?
- 有符号整数提升按照符号位来提升
- 无符号整数提升,高位补0
例如上面的例题为什么为打印a=-1,b=-1,c=255呢?
下面让我们来探讨探讨
-1的原码为10000000000000000000000000000001
补码为11111111111111111111111111111111
因为char存不下所以截断成11111111 以%d的形式打印发生整型提升为:
11111111111111111111111111111111----补码
10000000000000000000000000000001---原码
所以a=-1同理b=-1。(signed char 和char是一样的,只是char前面没写出来)
c为unsigned类型所以提升为:
00000000000000000000000011111111---补码
00000000000000000000000011111111---原码
所以c的值为255;