值溢出(usignedchar最大255)
题目来源:腾讯
答案:
在计算机中的基本单位:字节(Byte) 和 比特(bit) 关系如下
在计算机中任意的数据都以二进制 bit 的形式存在
以一个类型为 int8,值为 7 的数据为例,末尾三位的二进制和为数值 7,由于 int8 是有符号整型,因此符号位为 0
对于数据的 bit 形式有 原码、反码、补码和移码
在计算机中一般用补码存储数据
对于正数 补码 = 原码
,对于负数 补码 = 除符号位外全部取反,然后 + 1
以 int8, 值为 -7 的数据为例
由于 unsigned char
是无符号数据类型,因此当 8 个 bit 全为 1 时,表示最大值
27+26+…+21+20\=25527+26+…+21+20\=255
此时如果 +1
则会发生进位,此时的 unsigned char
就有了 9 个 bit 的数据,这当然是不允许的
计算机为了保证数据类型的 bit 位一致,对进位后的 1 会直接舍去
同时,在计算机中数据一般以 补码
的形式存在,因此正数的补码 1111111
+ 1 = 00000000
将补码 00000000
转换为源码就是 00000000
,值为 0