/var/log/masayoshi/masayoshi.life.log

とりあえず、書きたいこと書くだけ。

ビット演算がようやく理解できた



とりあえずand演算子から、これは2つの数字のそれぞれのビット数が共通して1であった場合は「1」が、それ以外だと「0」が代入される。


次の表はソースコードの数値を実際に2進数化した表だ





 168421
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」は奇数とわかってるけれど、動かしてみよう。


結果は「奇数」だ、ポイントというのはもう一つの表を見てもらいたい





 168421
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




情報提供:モバゲーのあるサークルの方です