2017-02-15 10 views
0

最後に1ビットを0に設定するには、&(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

ビット単位または1つ: 'x = x | 1 "...申し訳ありませんが、私の答えを見て、私はあなたがちょうど右端のビットを1に設定したいと思った。 –

答えて

5

を示していないだけで(まあ、ないまさにしかし、あなたは私が何を意味するかを取得)反対ん:ちょうど数のk番目のビットを設定しn | (n+1)

0

は、次の操作

n=n|(1<< k) 
を行います

ここで、kは設定したいビットです。

こちらがお役に立てば幸いです。他のビット操作のために

、あなたがこの質問を参照することができます:Manipulation of bits

+0

設定するビットがわかっているとうまくいく。 –

+0

@ vivek-pratap-chaurasia:答えは、「xの特定のビットを1に設定する」という意味です。しかし、問題は「最初のビットを設定することなく、**最後のゼロビット**を1に設定する」ことです。したがって、操作後は「101」(5)は「111」(7)になります。 –

1

1への最後のゼロ・ビットを設定するには、あなたはそれに1を追加して、ビット単位のOR

(x + 1) | x

-1
自体にすることができます

最後の0のビットを1に設定するには:

x|1 
+0

@ fei-hsueh:あなたの答えは、「xの最後のビットを1に設定する」という意味です。しかし、問題は "**最後のゼロビット**を1に設定する"ことです。したがって、操作後は「101」(5)は「111」(7)になります。 –

関連する問題