黑马程序员技术交流社区

标题: 应该怎么去理解 [打印本页]

作者: blz01003hm    时间: 2014-4-13 17:33
标题: 应该怎么去理解
本帖最后由 blz01003hm 于 2014-4-15 17:06 编辑

const int all1=~0;
void print_bin(const int a){
int flag=0x80;
while(flag!=0){
printf("%d",all1==(a+~flag));
flag/=2;
}
}

我知道这是打印整数二进制形式的功能 但不知道过程是怎样的?
作者: 流氓划过夜空    时间: 2014-4-15 14:06
楼主你那个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位   直到最后一位。


作者: blz01003hm    时间: 2014-4-15 17:05
流氓划过夜空 发表于 2014-4-15 14:06
楼主你那个printf("%d",all1==(a+~flag));     写错了吧     应该是printf("%d",all1==(a|~flag));

比如说 ...

恩  是我打错了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2