Интервью: Переворачивание Битов


Недавно я видел вопрос интервью, задающий следующее:

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

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

6 5

6 ответов:

#define MASK 0x00000002 

New = old ^ MASK

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

X ^ (1<<n) will toggle the state of nth bit in the number X.

Эксклюзив или с 2. Например, i = i ^ 2

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, конечно, вы можете это исправить: -) но 2-это второй бит, а не второй последний бит. Может быть, лучше поговорить о MSB и LSB.

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