位非(Bitwise Not)运算符未正确翻转比特位问题求助
问题原因与解决方法
为什么输出是-00000010而不是11111110?
- Python的整数采用无限精度的二进制补码存储,不是固定8位长度。位非运算
~x的本质是-x - 1,所以~1的结果是-2,而非8位的11111110。 f'{x:08b}'格式化负数时,会先输出负号,再把绝对值的二进制补零到8位。-2的绝对值是2,二进制是10,补零后就是00000010,所以最终显示为-00000010。
如何得到8位的比特翻转结果?
可以通过**位与0xff**截取低8位,截断高位符号位,转换成对应的无符号8位数值:
a = 1 print(f'{a:08b}') # 输出 00000001 x = ~a & 0xff print(f'{x:08b}') # 输出 11111110
0xff是8位全1的二进制数,和~a做位与操作后,会保留低8位的翻转结果,同时消除高位符号位的影响,最终得到预期的8位二进制值。
内容的提问来源于stack exchange,提问作者newbie54
相关产品推荐
相关产品推荐

