我們都知道將最後1位設置爲0的技巧n &(n-1)。例如,0110 &(0110-1)= 0100但是如何大約相反嗎?設置最後0到1?所以0110變成了0111?如何將最後(最低)0位設置爲1
我已經在stackoverflow和在線做了大量的搜索。沒有結果顯示出來
我們都知道將最後1位設置爲0的技巧n &(n-1)。例如,0110 &(0110-1)= 0100但是如何大約相反嗎?設置最後0到1?所以0110變成了0111?如何將最後(最低)0位設置爲1
我已經在stackoverflow和在線做了大量的搜索。沒有結果顯示出來
只是做相反的(當然,不完全是,但你明白我的意思):n | (n+1)
如果你知道要設置哪個位,那很好用。 –
@ vivek-pratap-chaurasia:您的回答指的是「將x的特定位設置爲1」。但問題是「將**最後零位**設置爲1」,而沒有先找到要設置的位。因此,操作後「101」(5)應變爲「111」(7)。 –
設置最後零位後,你可以添加一個,然後按位或與自身
(x + 1) | x
要設置最後(最低)0位爲1:
x|1
@ fei-hsueh:你的回答指的是「將x的最後一位設置爲1」。但問題是「將**最後零位**設置爲1」。因此,操作後「101」(5)應變爲「111」(7)。 –
不是位操作,但可以執行'x> = 0? (x-x%2):(x + x%2)'。如果x是無符號的,那麼你可以執行'x-x%2'。 – Scovetta
按位或用一個:'x = x | 1' ...對不起,看到我的回答,我以爲你想把最右邊的位設置爲1。 –