当我尝试从现有程序中学习时,我无法理解以下两行代码会尝试做什么?
for(i=0;0==(x&1);++i)x>>=1;
if(0==(x-=y)) return y<<i;
任何解释都将不胜感激。
答案 0 :(得分:9)
for(i=0;0==(x&1);++i)x>>=1
在整数
中查找设置为1
的最低有效位
if(0==(x-=y)) return y<<i;
从y
中减去x
,如果结果为0,则返回y
向{更高位)移位i
位。
答案 1 :(得分:4)
for(i=0;0==(x&1);++i)x>>=1;
此代码x>>=1
正在将x
的位移到右侧的位置。只要0==(x&1)
为真,这将继续,这意味着x
的最右位为0. i
是移位的位数。
if(0==(x-=y)) return y<<i;
此代码从y
中减去x
。然后,如果x
为0,则代码返回y
向左移动i
位。
答案 2 :(得分:0)
这是面试问题吗?
&lt;&lt;和&gt;&gt;运营商和&amp;所有按位操作都是如此。
从表面上看,第一个似乎向右移动直到找到1位,但是具有破坏性。
另一个人非常沮丧。
然而,如果没有更多的背景,目前尚不清楚该计划正在尝试做什么。
答案 3 :(得分:0)
如果x
x
向y
左移不定的i
位置,则会返回x = 01010000
。
也就是说,如果y = 00000101
和x
,它将返回{{1}}。如果不满足条件,问题中没有信息可以猜测它会返回什么。