python 存储数据是 number,对于整型,不区分 int, byte, long
int n1 = 0x80000000; // 最大负数, -2147483648
int n2 = 0x7fffffff; // 最大正数, 2147483647
printf("%d\n", n1);
printf("%d\n", n2);
printf("%d\n", (n1-1)); // 最大负数减去1变成最大正数
printf("%d\n", (n1) & (n1-1));
n1 = 0x80000000
n2 = 0x7fffffff
print n1 # 2147483648
print n2 # 2147483647
n3 = -2147483648
n4 = 2147483647
print n3
print n4
print (n3 - 1) # -2147483649
n3 = n3 & 0xffffffff # 转换成正数,不受int范围限制的
print n3 # 2147483648
print (n3 - 1) # 2147483647
n5 = -2147483647
n5 = n5 & 0xffffffff # 转换成正数,不受int范围限制的
print n5 # 2147483649
print (n5 - 1) # 2147483648
在求 int 二进制中1的个数的时候 , 如下的操作对于 python 负数 会不适用
n & (n-1)
可以把负数的n转换成为不受int 32bit范围限制的更大的正数
n & 0xffffffff
如 -2147483648
(int范围)和 2147483648
(非int范围) 两个数的二进制1
的个数相同