web-dev-qa-db-ja.com

2進数が3で除算されるかどうかを知る方法は?

バイナリシステムに3で割るための分割可能なルールがあるかどうかを知りたいです。

例:10進数では、数字の合計が3で除算されると、数値は3で除算されます。例:15 -> 1+5 = 6 -> 6は3で除算されるため、15は3で除算されます。

理解すべき重要なことは、そうするコードを探していないということです。bool flag =(i%3 == 0);私が探している答えではありません。私は、10進法と同じように人間が簡単に実行できるものを探しています。

13
Itay Braha

このWebサイトを参照してください。 2進数が3で割り切れるかどうかを確認する方法

基本的に、右からゼロ以外の奇数位置ビットとゼロ以外の偶数位置ビットの数をカウントします。それらの差が3で割り切れる場合、数は3で割り切れます。

例えば:

15 = 1111は、2つの奇数ビットと2つの偶数非ゼロビットを持っています。差は0です。したがって、153で割り切れます。

185 = 10111001には、2つの奇数の非ゼロビットと3つの偶数の非ゼロビットがあります。違いは1です。したがって、1853で割り切れません。

説明

2^n値を考慮してください。 2^0 = 1が一致する1 mod 3であることを知っています。したがって、2^1 = 2は構成2*1 = 2 mod 3です。パターンを続けると、nが奇数の2^nの場合、2^nは合同1 mod 3であり、偶数であることもわかります。一致する2 mod 3-1 mod 3です。したがって、10111001は合同1*1 + 0*-1 + 1*1 + 1*-1 + 1*1 + 0*-1 + 0*1 + 1*-1 mod 3であり、これは合同1 mod 3です。したがって、185は3で割り切れません。

29
Benson Lin