2017-02-15 114 views
0

我們都知道將最後1位設置爲0的技巧n &(n-1)。例如,0110 &(0110-1)= 0100但是如何大約相反嗎?設置最後0到1?所以0110變成了0111?如何將最後(最低)0位設置爲1

我已經在stackoverflow和在線做了大量的搜索。沒有結果顯示出來

+0

不是位操作,但可以執行'x> = 0? (x-x%2):(x + x%2)'。如果x是無符號的,那麼你可以執行'x-x%2'。 – Scovetta

+0

按位或用一個:'x = x | 1' ...對不起,看到我的回答,我以爲你想把最右邊的位設置爲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)。 –

相關問題