最近在学js,看到JavaScript高级程序设计里面有一句话:
按位非的本质就是操作数的负值-1,网上找了一下都是理论的,我谈一下我们理解,就在这里举一个2和-4的例子
首先,我们习惯的是原码,都是计算机里面是补码存取数据的,反码就是起了一个中间的作用。
其次,~就是所有位数全部取反,不要和求反码混淆了,包括符号位都是要取反的
假设以8位二进制存储
求~2
我们习惯的形式:
2的原码:00000010(第一个是符号位,0表示+,1表示-)
计算机里面存的2的样子:
2的补码:00000010(由于2是正数,正数的原码补码反码都是一样的)
则~2在计算机中的形式为:
~2的补码:11111101(就是把2的补码所有位数全部取反)
~2的反码:1000010(符号位为1,则求原码需要把补码->反码->原码)
~2的原码:1000011(也就是我们习惯的形式,由于符号位是1,即-3)
再来一个:
求~-4
我们习惯的形式:
-4的原码:10000100(第一个是符号位,0表示+,1表示-)
-4的反码:11111011(由于-5是负数,则求补码需要把原码->反码->补码)
计算机里面存的-5的样子:
-4的补码:11111100
则~-4在计算机中的形式为:
~-4的补码:00000011(就是把-4的补码所有位数全部取反)
~-4的原码:00000011(也就是我们习惯的形式,由于它的补码符号位为0,正数的原码=反码=补码,即5)
因此结论(按位非就是操作数的负值-1)得到验证
~2就是-3
~-4就是5
还没学计算机组成原理,可能理解有误差,欢迎指正