-128 和-0的区别,其实根本就没有联系。但是容易迷惑。
因为我们说 -128的时候,其实是在说补码,他本身是补码。而我们说-0的时候,是说的原码。
对于char型变量cv,表示的范围是-128~127。
cv = -127
我们知道对于-127的表示是1111,1111,他的补码是1000,0001,在内存是是补码表示方式。
cv = cv -1后,-128,的内存表示1000,0000,这个即使-128的补码。我们知道补码的补码是原码。但是我们不能用求反码再加1的方式求原码。这样会变成10000,0000,变成了0了。
而应该用求原码的定义来取得。即模值(1,0000,0000) - 1000,0000 = 1000,0000 。
而应该注意-0是1000,0000,他的补码是1,0000,0000 -000,0000 = 0000,0000 还是0x00h
(注第九位是模位。是不在有范围内的,但是我们的模值是2^8,即1,0000,0000)
ps:求补码公式 :对于负数,则用 模值 -负数的绝对值 = 补码。
个人理解,如有错误,麻烦指正。