正负数取反的结果和规律

正负数取反的结果和规律

读本文前请首先搞懂 “反码”,“取反”,“按位取反(~)”,这3个概念是不一样的。取反:0变1,1变0反码:正数的反码是其本身,对于负数其符号位不变其它各位取反(0变1,1变0)按位取反(~): 这将是下面要讨论的。“~”运算符在c、c++、java、c#中都有,之前一直没有遇到这个运算符。要弄懂这个运算符的计算方法,首先必须明白二进制数在内存中的存放形式,二进制数在内存中是以补码的形式存放的。另外正数和负数的补码不一样,正数的补码、反码都是其本身,既:正数9:原码为: 0000 1001补码为: 0000 1001反码为: 0000 1001再例如: -2 求原码: 1111 0010 (前面4个1表示符号位)求反码: 1111 1101 (符号位不变,其余各位求反)求补码: 1111 1110 (符号位不变,末位+1)所以-2在内存中存放为: 1111 1110-------------------------------------------------------------------------------------------------弄懂了上述情况后,如何计算就好办了假设要对正数9按位取反——> (~9),计算步骤如下,原码为 0000 1001,反码为 0000 1001,补码为 0000 1001,对其取反 1111 0110(符号位一起进行取反,这不是反码更加不是最终结果,只是补码的取反仅此而已)我们还需要把他转换成原码,因为是负数所以进行负数补码到原码的逆运算先减1得反码: 1111 0101取反得原码:1111 1010,(反码和原码是一个相对的概念,对反码取反就是原码。取反过程符号位是不变的哦)前面4个1是符号位,1是负数,既得十进制:-10不知道说的明不明白,这里步骤就是:1. 先对正数求补码2. 然后对补码取反,包括符号位3. 最后进行一个补码求原码的过程,一定要搞清概念啊。-------------------------------------------------------------------------------------------------下面我们再反推计算 (~ -10)-10的原码:1111 1010 -10的反码:1111 0101 (符号位不变)-10的补码:1111 0110 (符号位不变,末位+1)补码取反:0000 1001 (符号位一起取反)这是一个正数,那么我们对其求原码就可得到最终结果?因为正数的补码,反码,原码都是一样的 那我们的最终结果是 0000 1001 ,十进制是 9,这与我们前面推算出的结果吻合。-------------------------------------------------------------------------------------------------最后一个有趣的事实是:1. 所有正整数的按位取反是其本身+1的负数2. 所有负整数的按位取反是其本身+1的绝对值3. 零的按位取反是 -1(0在数学界既不是正数也不是负数) ————————————————

相关推荐

中国拿破仑
365怎么访问

中国拿破仑

📅 07-13 👁️ 9003
世纪与年代是怎么换算的?
beat365官方app安卓版下载

世纪与年代是怎么换算的?

📅 07-11 👁️ 989
​这才是DNF中的钢板套,不动如山并非虚言
365怎么访问

​这才是DNF中的钢板套,不动如山并非虚言

📅 07-05 👁️ 2003