我遇到了以下Python代码
>>> a = 0xff
>>> b = 1 << 8
>>> ~a & ~b
-512
为什么是-512?在二进制表示法中,它应该如下所示:
a 0 1111 1111 -> 255
b 01 0000 0000 -> 256
~a 1 0000 0000 -> -256
~b 10 1111 1111 -> -257
~a&~b 00 0000 0000 -> 0
我期望0与C中的signed int一样:
signed int a = 0xff;
signed int b = 1 << 8;
signed int k = ~a & ~b;
任何帮助?
答案 0 :(得分:4)
为方便起见,假设16位整数(原理不会因32位或64位而改变):
a = 0xff = 0000 0000 1111 1111
~a = -256 = 1111 1111 0000 0000
b = 1<<8 = 0000 0001 0000 0000
~b = -257 = 1111 1110 1111 1111
-256 = 1111 1111 0000 0000
-257 = 1111 1110 1111 1111
-------------------------- &
-512 = 1111 1110 0000 0000