原题如下:
write an expression that flips the left i bits, but the remaining bits unchanged.
要求:纯粹位运算,不许逻辑运算、算术运算夹杂其间。
在下的思路:
利用
0 ^ 0 = 0;
1 ^ 0 = 1;
1 ^ 1 = 0;
0 ^ 1 = 1;
构造前i个bit都是1后边都是0的数即可。
但是麻烦来了:如何构造?
在下的思路:~0000…0(i个0)1111…1即可得到。
但是,000……1111怎么得来呢?
如果用11111……111>>i,首位似乎会自动补1而不是0,那样便前功尽弃了。
有什么办法可以做到抹掉首位的1呢?
注意,不能用sizeof的哦~=w=
啊啊头要炸了。有没有前辈指点一二?
write an expression that flips the left i bits, but the remaining bits unchanged.
要求:纯粹位运算,不许逻辑运算、算术运算夹杂其间。
在下的思路:
利用
0 ^ 0 = 0;
1 ^ 0 = 1;
1 ^ 1 = 0;
0 ^ 1 = 1;
构造前i个bit都是1后边都是0的数即可。
但是麻烦来了:如何构造?
在下的思路:~0000…0(i个0)1111…1即可得到。
但是,000……1111怎么得来呢?
如果用11111……111>>i,首位似乎会自动补1而不是0,那样便前功尽弃了。
有什么办法可以做到抹掉首位的1呢?
注意,不能用sizeof的哦~=w=
啊啊头要炸了。有没有前辈指点一二?





