if((a>>(10-b))%2)

这个代码怎么理解?... 这个代码怎么理解? 展开
 我来答
听不清啊
高粉答主

2013-01-31 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部
先看(10-b))%2,当b是偶数时,%2的值为0,否则为1。
再看>>,它是右移运算。就是把a的值以二进制表示后再作右移运算。如a=10,其二进制值为1010
右移1位即为101,如果a=5,其二进制值为101,右移1位即为10。C语言中非零值即代表真。
if (值非零)...
所以,此代码的实际意义为
if ((10-b)%2==1)&&(a>1)) || ((10-b)%2==0)&& (a>0)) || (a<0) ...
这里因为当a<0时,a的补码(计算机中C语言的数值用补码表示)的符号位(最高位肯定为1),所以,a右移1位后肯定非零。有关数的二进制表示你可另行详查:http://wenku.baidu.com/view/a296c3315a8102d276a22ff7.html
富港检测技术(东莞)有限公司_
2024-08-05 广告
作为富港检测技术(东莞)有限公司的工作人员,关于ISTA 1A、2A及3A的区别及测试项目简述如下:ISTA 1A是非模拟集中性能试验,主要进行固定位移振动和冲击测试,针对不超过68kg的包装件。ISTA 2A则在此基础上增加了部分模拟性能... 点击进入详情页
本回答由富港检测技术(东莞)有限公司_提供
潮运虹0K
2013-01-31 · TA获得超过514个赞
知道小有建树答主
回答量:195
采纳率:0%
帮助的人:162万
展开全部
就是这个意思:
int c = 10 - b;
c = a >> c;
c = c % 2;
if(c > 0) ... ;

翻译成汉语就是:看一下 a 右移 10 - b 位后还是不是奇数,
高手通常会理解成:a 的 第 10 - b + 1 位是不是 1
当然,你给的写法的效率是极低的,正常的系统编程会这么写:

int bitpos[] = { 0x0400, 0x0200, 0x0100, 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
if( a & bitpos[b] )
....

希望您能理解并采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天蝎魔君
2013-01-31 · TA获得超过292个赞
知道小有建树答主
回答量:415
采纳率:0%
帮助的人:305万
展开全部
if((a>>(10-b))%2)→(a>>(10-b))%2 →a>>(10-b)→10-b 反过来就是运算顺序,即
10-b→a>>(10-b)→a>>(10-b))%2→if((a>>(10-b))%2)
楼上看不懂的应该是a>>(10-b)操作,右移操作,具体的参考如下
http://baike.baidu.com/view/549681.htm
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱默踢
2013-01-31 · TA获得超过265个赞
知道小有建树答主
回答量:350
采纳率:0%
帮助的人:173万
展开全部
a右移10-b位后对2取余,然后判断结果是否为0
实际主要是在判断a右移10-b位后是否能让2整除
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
久病成yi
2013-01-31 · TA获得超过268个赞
知道小有建树答主
回答量:471
采纳率:0%
帮助的人:204万
展开全部
先运算>> 再运算% 注意优先级
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式