Что такое (x & 1) и (x > >= 1)?

Я пытаюсь выполнить назначение: "Найти количество бит в неподписанном целочисленном типе данных без использования функции sizeof().

И мой проект состоит в том, чтобы преобразовать целое число в биты и затем подсчитать их. Для ex: 10 is 1010 и 5 is 101

Преобразование целого числа в представление бит показывает примерно следующее:

do
{ 
    Vec.push_back( x & 1 ) 
} 
while ( x >>= 1 );

Я не хочу просто копировать вставки. Когда я использую F-10, я вижу, что делает (x & 1), но я не знаю, что это имя или как он выполняет свою работу (сравните что-то?). Также я знаю >=, который "больше или равен", но что такое x >>= 1?

Примечание: отмеченный дубликат - это JavaScript, а не С++

Ответы

Ответ 1

Это побитовые операторы (reference).

x & 1 выводит значение, равное 1 или 0, в зависимости от младшего значащего разряда x: если последний бит 1, результатом x & 1 является 1; в противном случае это 0. Это побитовая операция И.

x >>= 1 означает "set x для себя сдвинутым на один бит вправо". После сдвига выражение получает новое значение x.

Примечание: Значение самого значимого бита после сдвига равно нулю для значений неподписанного типа. Для значений подписанного типа самый старший бит копируется из знакового бита значения перед сдвигом как часть расширения знака, поэтому цикл никогда не завершится, если x является подписанным типом, а начальное значение отрицательным.

Ответ 2

Он похож на x = (x >> 1).

(operand1)(operator)=(operand2)  implies(=>)  (operand1)=(operand1)(operator)(operand2) 

Он сдвигает двоичное значение x на одно вправо.

например.

int x=3;    // binary form (011) 
x = x >> 1; // zero shifted in from the left, 1 shifted out to the right:
            // x=1, binary form (001)