按位取反~运算

按位取反~运算


首先我们来看按位取反的概念

按位取反运算符:对数据的每个二进制位取反,即把0变成1,把1变成0.

即~x=-x-1

这里按照定义

9的二进制为00001001
其按位取反为11110110
结果为-10

这个过程没有任何问题,但是如果忘记了负数的二进制表达方式,就会对这个结果产生疑问,为什么11110110表示-10而不是503?理解按位取反的关键是理解11110110为什么表示-10,也就是负数的二进制表达方式。

现在计算机普遍使用补码表示负数。

知道补码,求源码的方式是:值取反再加1。
补码的第一位符号位决定了源码的正负,第一位为0源码为正,第一位为1源码为负。

现在我们可以理解上面那个例子,9按位取反后得到11110110,其第一位为1,源码为负值。
取反后为00001001,再加1得00001010,其值为10,再加上负号即为-10。

也即 ~9=-10

你可能感兴趣的:(html)