| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1349 人关注过本帖
标题:位运算取位问题
只看楼主 加入收藏
min364000
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2009-1-7
收藏
 问题点数:0 回复次数:4 
位运算取位问题
由于是wap发贴,无法分行,挤在一起看起来比较累,请见谅。   由于老谭的习题上机与指导错误实在太多了,所以对此题的题解正确表示怀疑。以下是他写的取位函数:unsigned short int getbits(unsigned short value,int n1,int n2)/*分行*/ {unsigned short int z; /*分行*/ z=~0; /*分行*/ z=(z>>n1) & (z<<(16-n2)); /*分行*/ z=value & z; /*分行*/ z=z>>(16-n2); /*分行*/ return (z);}  printf("%d\n",getbits(100,1,5 )); 结果为0。可能吗?100的二进制为:1100100取1至5位结果应该是4才对啊。看他的解题思路实在不解,又看他下面特意写了一百多字解释说他这个函数怎么适用的……晕乎中,应该和编译器没关系吧?我用DEV的,谁有空用TC帮我编译下看看正确答案啊!
搜索更多相关主题的帖子: 运算 
2009-08-09 17:43
西园竹
Rank: 5Rank: 5
等 级:职业侠客
帖 子:41
专家分:305
注 册:2009-8-8
收藏
得分:0 
因为他是取的unsigned short int
确实和编译器有关,32位编译器中,这个是16位的,100的二进制是000000001100100,你知道为什么事0了吧
2009-08-09 18:21
min364000
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2009-1-7
收藏
得分:0 
全改int也一样,我怀疑是函数错误,里面的代码怎么看都有点怪怪的。
2009-08-09 19:07
西园竹
Rank: 5Rank: 5
等 级:职业侠客
帖 子:41
专家分:305
注 册:2009-8-8
收藏
得分:0 
呵呵,int就更加了,int是32位啊,100的int,前面有24位都是0,1-5毫无疑问的是0啊,改成unsigned char才对
2009-08-09 19:09
min364000
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2009-1-7
收藏
得分:0 
我知道为什么了,他是按左往右算位取值
2009-08-09 19:20
快速回复:位运算取位问题
数据加载中...
 
   



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

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