Javaの基本文法その2Advertisementビット演算(論理演算)
まずは論理演算。
使用例。
public class BitOP{
public static void main(String args[]){
int a = 1;
int b = 5;
//論理積
int and = a&b;
//論理和
int or = a|b;
//排他的論理和
int xor = a^b;
//補数
int not = ~a;
System.out.println("AND :" + and);
System.out.println("OR :" + or);
System.out.println("XOR :" + xor);
System.out.println("NOT :" + not);
}
}
実行結果
AND :1 OR :5 XOR :4 NOT :-2ちなみにJavaの場合、intはすべて32ビットで演算される。 ビット演算(シフト演算)
以下の演算子を使うことで、ビット列のシフトを行うことができる。
public class BitShift{
public static void main(String args[]){
int a = 2;
int b = 32;
int c = 0xFFFFFFFF; //-1
//2ビット左シフト
System.out.println("a<<2 : " + (a<<2));
//4ビット右シフト
System.out.println("b>>4 : " + (b>>4));
//4ビット右シフト(論理)
System.out.println("c>>>4 : " + (c>>>4));
}
}
※println()の中で括弧をつけているのは演算では左側の方が優先順位が高いから。上の例の場合では、左の値がStringなので以後の演算は文字列結合として扱われる。だから明示的に優先順位を指定する必要がある。 結果 A<<2 : 8 B>>4 : 2 C>>>4 : 268435455Aは2*4。Bは32/16。cはFFFFFFFFが0FFFFFFFになった。 算術演算子は1桁左に移動すると数が2倍になる(オーバーフローしない場合)。 2桁で4倍、3桁で8倍。 右移動だと1桁で2分の1、2桁で4分の1。 おまけ:シフト数に32以上を指定すると、指定した数字を32で割った余りの分シフト移動される。 たとえば int num = 10; num >> 32とした場合 32 ÷ 32 = 1 であまりが0だから、0ビット右シフト、つまり1桁も移動しないことになる。意味不明。 Advertisement |
ショートカット・634・このカテゴリのトップページに戻る ・634labs UIコレクションギャラリー サイト検索Y!ログール |