IT用語/ブール演算 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
排他的論理和って何だっけ・・・(2014-09-06、追記:2019-04-14) なんでしょう、これ、もう説明のしようがないので、 論理和(OR) †
論理積(AND) †
否定(NOT) †否定も、補集合(Compliment)も、相補演算(Complementary Operation)*1も全部同じことだろ?なんでいちいち呼び方変えるんだよ!
排他的論理和(EOR、XOR) †
否定論理和(NOR)、否定論理積(NAND) †論理和、論理積の出力(0/1)が逆になるだけ ド・モルガンの法則 †!(A || B) == !A && !B !(A && B) == !A || !B いや、もう俺は情報処理試験で(不合格も含めて)一体何回これを覚えては忘れてるんだ? 実際に使う時の例、その1当時、情報処理試験の為にわけも分からずイヤイヤ覚えたメモなのでこれでも良かったのですが、 true & !true = false (真に偽のマスクをかけると、偽) とか言われてもピンとこないかもしれませんが、 0b0110 & ~0b0010 = 0b0100 (偽真真偽 に 偽偽真偽 のマスクをかける) ( 6 & ~2 = 4 ) とか、本番?ではフラグを4つで使ったりします。 Linux の man umask より 0666 & ~022 = 0644; (i.e., rw-r--r--) Linuxで何か任意のファイルを作成した時に、 実際に使う時の例、その2別の例です。 boolean a = true, b = false; System.out.println("AND:" + (a & b)); // false boolでも分かりやすいのですが、 final int FLAG_A = 2, FLAG_B = FLAG_A*2, FLAG_C = FLAG_B*2; int flag = FLAG_A | FLAG_B; // つまり6 System.out.println("flag:" + flag); // 6 System.out.println("mask:" + (flag & ~FLAG_B)); // 2 boolean で配列作れば良いんですが、それがめんどくさい or 1つの変数に全部ねじ込みたい時に // Androidでダイアログに、なんかフラグを渡す時の例 dialog.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN ); SOFT_INPUT_STATE_ALWAYS_VISIBLE とかは intです。 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||