我们都知道将最后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。 –