ビット演算がようやく理解できた
とりあえずand演算子から、これは2つの数字のそれぞれのビット数が共通して1であった場合は「1」が、それ以外だと「0」が代入される。
次の表はソースコードの数値を実際に2進数化した表だ
16 | 8 | 4 | 2 | 1 | |
---|---|---|---|---|---|
21 | 1 | 0 | 1 | 0 | 1 |
1 | 0 | 0 | 0 | 0 | 1 |
余 | 5 | 5 | 1 | 0 | 0 |
21が今回使う数字、1がビット判定で使う数字、余は21から上の数値を引いて行った結果だ。
引けない場合はそのままにしてある、余りは単純にどうなってるかを見るだけだw
ソースコードを見てみよう
class java_study_9{
public static void main(String args[]){
int i_val ;
i_val = 21 ;
if((i_val & 1) == 0){
System.out.print("偶数") ;
}else{
System.out.println("奇数") ;
}
}
}
今回用いたのはさっきも言った通り、21を1でandでビット演算する。
それがそのためのソースコードだ。
やることはi_valという変数に入れられた値が「偶数」か「奇数」かだ、さっきの表に戻ろう。
見るのは1の下だ、「21」「1」をそれぞれ2進数化した結果はそれぞれ「1」になっている。
これがポイントだ
ifでは「比較した結果が『0』であれば偶数、それ以外は奇数と判定している。
もう「21」は奇数とわかってるけれど、動かしてみよう。
結果は「奇数」だ、ポイントというのはもう一つの表を見てもらいたい
16 | 8 | 4 | 2 | 1 | |
---|---|---|---|---|---|
20 | 1 | 0 | 1 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 1 |
余 | 4 | 4 | 0 | 0 | 0 |
こっちは20を2進数化したものだ、見てもらうのは「1」の下。
20だと0になってるね、これこそが見分けるポイント。
「1」が「0か1」かである
偶数は2で割り切れる、しかし奇数は2で割っても1が余る。
その1こそが分岐点なのです、次回はor演算子やります。
andの部分を変えるだけですみますがw
情報提供:モバゲーのあるサークルの方です