| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 922 人关注过本帖
标题:明解 C 中一个例题,窥探整数内部 ,很不明白,求大神指教。
取消只看楼主 加入收藏
stoneshing
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2014-8-18
结帖率:100%
收藏
 问题点数:0 回复次数:3 
明解 C 中一个例题,窥探整数内部 ,很不明白,求大神指教。
程序目的:显示 unsigned 型内部的位串

#include <stdio.h>

int count_bits (unsigned x)
{
int count =0;
while (x){
if (x &1U) count++;
x>>=1;
}
return (count);
}//书中说这是返回整数X中设置的位数。

int int_bits()
{
return (count_bits(~0u));
}

void print_bits (unsigned x)
{
int i;
for (i=int_bits()-1;i>=0;i--)
putchar (((x>>i)&1u) ? '1':'0');

}

int main ()
{
unsigned nx;
printf("请输一个非负整数:");
scanf("%u",&nx);
print_bits (nx);
putchar ('\n');
return 0;
}


请大神详细,举例说明啊,谢谢
搜索更多相关主题的帖子: include return count 
2014-08-31 14:49
stoneshing
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2014-8-18
收藏
得分:0 
回复 4 楼 erty1001
谢谢,我打印出来,一步一步看,太感谢了。
2014-08-31 18:37
stoneshing
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2014-8-18
收藏
得分:0 
回复 4 楼 erty1001
感谢erty1001

研究了好久,有点感觉 ,但有以下几点不明白:

1:count_bits(~0u)  这个返回值 ,应该是程序自动计算出不同计算机的位宽吧?以后求此类问题,都可套用此函数吧?如果是64位,是表示CPU 是64位,还是操作系统是64位?

2:for (i=int_bits()-1;i>=0;i--)   这里i=int_bit()-1;这个表达式不明白,i 表示位移的位数,是不是由于unsigned x,最高位符号位是0,不能移动? 如0111向右移4位,在表达式
((x>>i)&1u) ? '1':'0' 中,和移三位没有区别啊。 若表达式改为 ((x>>i)&1u) ? '0':'1',则符号发生了变化。有点凌乱。

3:void print_bits (unsigned x)      //由主函数 输入x=“00000000000000000010100101010101010010101” 共32位
                                  //注意这里01是计算机自动转换的 其实输入的是x=565412521

是否只有涉及到位运算符&,如 123&456,计算机都会自动把十进制123,456转化成相应的二进制 ?

谢谢。
2014-09-01 08:57
stoneshing
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2014-8-18
收藏
得分:0 
回复 8 楼 erty1001
谢谢,我想还是要先习惯编程思维,我多看看。
2014-09-02 23:06
快速回复:明解 C 中一个例题,窥探整数内部 ,很不明白,求大神指教。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021861 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved