Интервью: Flipping Bits - PullRequest
5 голосов
/ 06 июля 2010

Я недавно видел вопрос интервью, спрашивающий следующее:

Учитывая 32-битное число, напишите псевдо код для переключения второго последнего бита

Какой самый лучший / самый простой способ сделать это?

Ответы [ 6 ]

9 голосов
/ 06 июля 2010
#define MASK 0x00000002 

новый = старый ^ MASK

7 голосов
/ 08 октября 2010

Я вижу, что некоторые ответы интерпретируют "последний бит" как MSB, другие как LSB. Возможно, они ищут кандидатов, достаточно умных, чтобы сделать паузу и попросить разъяснений, прежде чем начинать код. Это очень важно в реальной работе.

5 голосов
/ 17 июля 2010
X ^ (1<<n) will toggle the state of nth bit in the number X.
4 голосов
/ 06 июля 2010

Исключительно или с 2. Например, я = я ^ 2

3 голосов
/ 06 июля 2010
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;

edit: arg, конечно, вы можете XOR это :-) Но 2 - второй бит, а не второй последний бит.Может быть, лучше поговорить о MSB и LSB.

0 голосов
/ 06 июля 2010

использовать побитовый оператор XOR?

...