想必看这篇文章的你,肯定是曾经理解有符号整数在内存中的存储的形式的。并且,你可能不满足于晓得 what,而想晓得 why, 要解决这个问题,咱们须要合成为两个小问题来进行解答。
1、为什么要取反?
可能你思考过,在八位内存构造中,咱们间接用 1000 0001 来示意 - 1 就行了,干嘛还这么麻烦去用 1111 1111 来示意 -1。
你应该晓得用前者的存储形式的目标是为了不便你的记忆。而咱们存储正数的目标不仅仅是为了不便记忆存储,更为重要的是为了应用它来进行正数的计算。所以这是你思维偏离的起因。(留神这不是思维谬误,只是你的思维站在了不便记忆的这一角度。然而有符号正数的存储是为了解决不便计算的问题,这是站在不便计算的角度。这也是咱们常说的站在不同档次和不同角度思考问题会产生不同的后果)
站在不便计算的角度,正数取反其实次要是为了解决相反数相加等于零的问题。
1+(-1)=0 -》0000 0001 + 1111 1111 = 1 0000 0000. 而后高位溢出剩下 0000 0000。
2、为什么要加一?
这个可能提一下就了解了,咱们晓得 0000 0000 示意 0(负数补码为原码),如果规定只是正数取反,那 1111 1111 就应该示意 - 0 了呀(尽管可能高等数学中有正负 0 的概念,然而那是基于无现的条件下,咱们晓得计算机只能计算无限值,所以不思考),那不是节约么。那咱们把它都往后挪一位,1111 1111 示意 -1。这也是为什么 byte 类型为什么是 -128~127