读〈深入理解计算机系统〉2.3.3 - 补码的非,有所思,录于此
话总得有个头吧,这个头就是我想知道,补码的非,这种算法用途在什么地方
先看“补码的非”定义:
上面是原书的截图,此处设w=4,用补码可表示的范围就是[-8,7],对于-8,它的“补码的非”还是-8,而[-7,7]补码的非就是原数的负数,比如说-4的“补码的非”是-4取负,即:4,而3的“补码的非”是3取负,即:-3。这是“补码的非”的定义;注意:“补码的非”并不是把“一个数的补码按位取非”,但是呢,“补码的非” 跟 “一个数的补码按位取非” 有些特殊的关系,可以利用这种特殊的关系来快速计算一个数的“补码的非”,原文列举了两种方法来根据“一个数的补码按位取非”求得此数“补码的非”,截图如下:
那么问题来了,学挖掘机哪家强?
跑题了......
梳理一下,一个数A,它的“补码的非”,知道是怎么一回事了,也会根据“A的补码,按位取非”结合上面说的两种方法来快速求得“A的,补码的非”,而,在计算机中,通常是使用补码来表示一个数,所以我们可以得到:将A的补码按位取非,然后用上面说的某一种方法来求得A的“补码的非”,再根据“A的,补码的非”从而求得A,兜了这么一个大圈子,就是为了在调试程序的时候,能快速计算出其二进制补码所表示的十进制数值是多少!上面的截图中就提到了,你看到0xfffffffa的时候,可以计算出它是十进制数-6的补码表示,当然了,从-6转成0xfffffffa比较简单,而从0xfffffffa转成-6就相对复杂一点了
在计算机的世界中,就是01的序列,对这些序列以不同的方式进行解读,那么得到的结果就也会不同,妈蛋,又联想到了易经上面的阴阳以及64挂