2017-02-15 2 views
0

мы все знаем трюк n & (n-1), чтобы установить последний 1 бит в 0. Например, 0110 & (0110-1) = 0100. но как об обратном? установить последние 0 на 1? поэтому 0110 становится 0111?как установить последний (самый низкий) 0 бит в 1

Я сделал большой поиск в stackoverflow и в Интернете. результата не проявляется

+0

Не манипулировать бит, но вы можете сделать 'x> = 0? (x - x% 2): (x + x% 2) '. Если x без знака, вы можете просто сделать x x x 2. – Scovetta

+0

поразрядным или с одним: 'x = x | 1' ... извините, см. Мой ответ, я думал, что вы хотите просто установить самый правый бит в один. –

ответ

5

Просто сделайте наоборот (ну, не совсем, но вы получите то, что я имею в виду): n | (n+1)

0

Для установки k я битого числа вобще следующей операции

n=n|(1<< k) 

где k бит, который вы хотите установить.

Надеюсь, это поможет.

Для другой манипуляции с битами, вы можете обратиться к этому вопросу: Manipulation of bits

+0

Это отлично работает, если вы знаете, какой бит установить. –

+0

@ vivek-pratap-chaurasia: ваш ответ относится к «установке определенного бита от x до 1». Но вопрос заключается в том, что «установить последний бит нуля ** на 1», без предварительного определения того, какой бит установить. Поэтому после операции «101» (5) должно стать «111» (7). –

1

Чтобы установить последний нулевой бит на один, вы можете добавить один к нему, а затем Поразрядному или с самой

(x + 1) | x

-1

Установить последний (самый низкий) 0 бит в 1:

x|1 
+0

@ fei-hsueh: Ваш ответ относится к «установке последнего бита x на 1». Но вопрос заключается в том, что «установить последний бит нуля ** на 1». Поэтому после операции «101» (5) должно стать «111» (7). –

Смежные вопросы