A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© blz01003hm 高级黑马   /  2014-4-13 17:33  /  975 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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;
}
}

我知道这是打印整数二进制形式的功能 但不知道过程是怎样的?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

2 个回复

倒序浏览
楼主你那个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位   直到最后一位。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
流氓划过夜空 发表于 2014-4-15 14:06
楼主你那个printf("%d",all1==(a+~flag));     写错了吧     应该是printf("%d",all1==(a|~flag));

比如说 ...

恩  是我打错了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马