1.对于正数来说,原码 反码 补码是一样的(三码合一)
2.负数反码等于符号位不变,其余位数取反
3.负数补码等于反码基础上+1
反码的出现是为了使得符号位可以参与运算,这样计算机内部仅设置加法器就可以了
对于原码来说 1+(-1)=00000001(原)+10000001(原)=10000010(原)= -2(错误)
对于反码来说 1+(-1) =00000001(反)+11111110(反)=11111111(反)=10000000(原)= -0
此时发现10000000和0000000都表示0,补码就可以解决这个问题,补码在反码基础上加1,使得反码与真值的映射关系向负数域整体偏1位。
对于补码来说 1+(-1)=00000001(补)+11111111(补)=100000000(补)
溢出舍去一位=00000000(补)=00000000(原)=0;
而原本的10000000被规定为-128
在真实的计算机中 int类型由四字节表示,所以表示范围是【-2^31 - 2^31-1】