ド・モルガンの法則を実証してみた

ド・モルガンの法則はAとBの値がある場合「AとBをOR演算して反転した値は、AとBそれぞれを反転してAND演算した値と等しい」というものです。
これをC言語で表すと以下になります。
!(a || b) == (!a && !b)

また、ORとANDを入れ替えて以下も成立します。

!(a && b) == (!a || !b)

つまり「AとBをAND演算して反転した値は、AとBそれぞれを反転してOR演算した値と等しい」とも言えます。
そこで実際に法則通りの結果となるか、以下のC言語のプログラムで実証してみました。

void getMorgan1(int a, int b) {
    int result;
    result = (!(a || b) == (!a && !b));
    printf("%d %d %s\n", a, b, (result ? "true" : "false"));
}

void getMorgan2(int a, int b) {
    int result;
    result = (!(a && b) == (!a || !b));
    printf("%d %d %s\n", a, b, (result ? "true" : "false"));
}

void main() {
    getMorgan1(0, 0);
    getMorgan1(0, 1);
    getMorgan1(1, 0);
    getMorgan1(1, 1);
    printf("-------------\n");
    getMorgan2(0, 0);
    getMorgan2(0, 1);
    getMorgan2(1, 0);
    getMorgan2(1, 1);
}

結果:

0 0 true
0 1 true
1 0 true
1 1 true
-------------
0 0 true
0 1 true
1 0 true
1 1 true

この法則はどちらの書き方が良いかではなく、論理演算式の変換をする際に役に立ちます。

公開日:2019年03月24日

記事 > 論理演算 > ド・モルガンの法則を実証してみた

論理演算の記事一覧

他の記事も見る

このページのトップに戻る