整体框架
位运算
位运算的基础——补码
数值在计算机中都是以补码的形式进行存储,所有的位运算也是在补码的基础上进行的。
或者用这个方法:
- 对于给定的整数 x,如果 x 是非负数(即 x ≥ 0),则它的补码就是它本身。
- 对于给定的整数 x,如果 x 是负数(即 x < 0),则它的补码可以通过以下步骤计算:
- 将 x 的绝对值转换为二进制表示形式。
- 如果二进制表示形式的位数不足,要在最高位前面补足足够的零,使之达到所需的位数。
- 反转所有位的值(0 变为 1,1 变为 0)。
- 对反转后的二进制数加 1。
举个例子,假设要将整数 -5 转换为补码:
- 先将 5 转换为二进制,得到 101。
- 由于 101 只有 3 位,需要在最高位前面补足一个零,得到 0101。
- 反转所有位的值,得到 1010。
- 将反转后的二进制数加 1,得到 1011。这就是 -5 的补码表示形式。
这个公式适用于大多数计算机系统中的补码表示方法。
理解位运算符
我们通过补码就很好理解下面代码的运行结果
print(~2)
输出:-3
不理解的友可以在评论区评论“为什么?”,有需要的话,我再详细写出推导过程
注意点
对于>>有一点特别之处,负数的补码首位为1,在进行>>后,为保持符号不变,会在首位补1!
对于身份、逻辑、成员运算符
注意它的输入类型,比如逻辑运算符,输入是两个布尔值。