2017-02-15 123 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)。 –

相关问题