楼主你那个printf("%d",all1==(a+~flag)); 写错了吧 应该是printf("%d",all1==(a|~flag));
比如说你传入的值是5
5在内存中表现形式是 0000 0101 前面补0 最高位1
const int all1=~0; 是最高位0 其他位全是1 先写一位算 1000 0000
0x80 是16进制数 在内存表现形式是 1000 0000 只写出来最后一位哦
all1==(a|~flag)
~flag : flag各位去反 结果0111 1111
a|~flag : a的二进制位与~flag的二进制按位或 以5为例 0000 0101 结果为 0111 1111
all1 == (a| ~flag) 结果为0
以上这句效果就是判断第8位二进制内存中为0 或 1
flag/2 相当于flag向右移一位 最高位补0(0x80是正数)
接着循环判断第7位 直到最后一位。
|