我最近看到一个面试问题,询问以下内容:
给定32位数,写入伪 用于翻转倒数第二位的代码
最好/最简单的方法是什么?
答案 0 :(得分:9)
#define MASK 0x00000002
new = old ^ MASK
答案 1 :(得分:7)
我看到一些答案将“最后一位”解释为MSB,其他解释为LSB。也许他们正在寻找足够聪明的候选人来暂停并在开始编码之前要求澄清。这在现实世界的工作中非常重要。
答案 2 :(得分:5)
X ^ (1<<n) will toggle the state of nth bit in the number X.
答案 3 :(得分:4)
独占或2.例如i = i ^ 2
答案 4 :(得分:3)
a = 0x80000000; // the second last bit set
if( i & a == 0) // not set in i -> set it
i |= a;
else // set -> un-set it in i
i &= ~a;
编辑:arg,当然你可以对它进行异或:-)但是2是第二位而不是倒数第二位。或许最好谈谈MSB和LSB。
答案 5 :(得分:0)
使用按位XOR运算符?