第78回【JavaScript】論理積( AND )の基本、論理和( OR )の基本、否定( NOT )の基本、排他的論理和( XOR )の基本

JavaScriptby LeoSaki

現在取り組んでいるのは、paiza ラーニング問題集「論理演算メニュー」になります。

学習サービストッププログラミング学習サイト【paizaラーニング】のメインページ。paiza独自のシステムにより、面倒な環境構築が不要、Webブラウザがあれば5秒で学習が開始できます。わかりやすい1本3分の動画と豊富な演習問題で初心者〜中級者のプログラミング学習を支援します。paiza.jp

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

JavaScript をゼロから勉強してみよう、のコーナー 78 回目です。

ちょっと無理をすると、体調を崩します。昔はそんなことなかったのに。年齢的なものでしょうか。数日、ほとんどまともに寝てなくて、それでもようやく完成して、ほっと一息ついた途端にずぶずぶと沼に沈んでいった感じです。

それでは、今日も頑張ってみようと思います。

論理積( AND )の基本 (paizaランク D 相当)

プログラミング練習問題「論理積( AND )の基本」問題を解いてスキルアップ!みんなも一緒に解いてみよう!paiza.jp

0 または 1 の整数 A と B が与えられます。 A AND B の結果を出力してください。
ここで、 AND 演算とは、以下の表にしたがって算出する論理演算のことを指します。

入力1入力2出力
000
010
100
111

表を参考にして条件分岐を書くことによってもこの問題は解けますが、なるべく各言語に備わっている論理演算の機能を用いて実装するようにしましょう。たとえば、以下のような C++ のプログラムでも正解できてしまいますが、論理演算の練習のためできるだけこのようなプログラムは書かないようにしましょう。

#include <iostream>
using namespace std;
int main() {
    int a, b;
    cin >> a >> b;
    if (a == 0 && b == 0) {
        cout << 0 << endl;
    } else if (a == 0 && b == 1) {
        cout << 0 << endl;
    } else if (a == 1 && b == 0) {
        cout << 0 << endl;
    } else if (a == 1 && b == 1) {
        cout << 1 << endl;
    }
}

入力される値

A B

入力値最終行の末尾に改行が1つ入ります。


期待する出力

A AND B の結果を 0 または 1 で出力してください。末尾に改行を入れ、余計な文字、空行を含んではいけません。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・ A, B は 0 または 1


入力例

0 0

出力例

0

ビット演算の方の論理積、でしょうか。&& だと、片方しか評価されないこともある。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const [a,b] = lines[0].split(/\s/).map(Number);
  console.log(a & b);
});
Python
A,B = map(int,input().split())
print(A and B)

論理和( OR )の基本 (paizaランク D 相当)

プログラミング練習問題「論理和( OR )の基本」問題を解いてスキルアップ!みんなも一緒に解いてみよう!paiza.jp

0 または 1 の整数 A と B が与えられます。 A OR B の結果を出力してください。
ここで、 OR 演算とは、以下の表にしたがって算出する論理演算のことを指します。

入力1入力2出力
000
011
101
111

表を参考にして条件分岐を書くことによってもこの問題は解けますが、なるべく各言語に備わっている論理演算の機能を用いて実装するようにしましょう。たとえば、以下のような C++ のプログラムでも正解できてしまいますが、論理演算の練習のためできるだけこのようなプログラムは書かないようにしましょう。

#include <iostream>
using namespace std;
int main() {
    int a, b;
    cin >> a >> b;
    if (a == 0 && b == 0) {
        cout << 0 << endl;
    } else if (a == 0 && b == 1) {
        cout << 1 << endl;
    } else if (a == 1 && b == 0) {
        cout << 1 << endl;
    } else if (a == 1 && b == 1) {
        cout << 1 << endl;
    }
}

入力される値

A B

入力値最終行の末尾に改行が1つ入ります。


期待する出力

A OR B の結果を 0 または 1 で出力してください。末尾に改行を入れ、余計な文字、空行を含んではいけません。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・ A, B は 0 または 1


入力例

0 0

出力例

0

論理和は先頭が True であれば後ろを評価する必要がないので、|| ってことでしょうか。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const [a,b] = lines[0].split(/\s/).map(Number);
  console.log(a || b);
});
Python
A,B = map(int,input().split())
print(A or B)

否定( NOT )の基本 (paizaランク D 相当)

プログラミング練習問題「否定( NOT )の基本」問題を解いてスキルアップ!みんなも一緒に解いてみよう!paiza.jp

0 または 1 の整数 A が与えられます。 NOT A の結果を出力してください。
ここで、 NOT 演算とは、以下の表にしたがって算出する論理演算のことを指します。

入力出力
01
10

入力される値

A

入力値最終行の末尾に改行が1つ入ります。


期待する出力

NOT A の結果を 0 または 1 で出力してください。末尾に改行を入れ、余計な文字、空行を含んではいけません。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。


入力例

0

出力例

1

Python のときと同様、数値に変換してあげる必要がある。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');
// 自分の得意な言語で
// Let's チャレンジ!!
var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const a = Number(lines[0]);
  console.log(Number(!a));
});
Python
A = int(input())
print(int(not A))

排他的論理和( XOR )の基本 (paizaランク D 相当)

プログラミング練習問題「排他的論理和( XOR )の基本」問題を解いてスキルアップ!みんなも一緒に解いてみよう!paiza.jp

0 または 1 の整数 A と B が与えられます。 A XOR B の結果を出力してください。
ここで、 XOR 演算とは、以下の表にしたがって算出する論理演算のことを指します。

入力1入力2出力
000
011
101
110

入力される値

A B

入力値最終行の末尾に改行が1つ入ります。


期待する出力

A XOR B の結果を 0 または 1 で出力してください。末尾に改行を入れ、余計な文字、空行を含んではいけません。

また、末尾に改行を入れ、余計な文字、空行を含んではいけません。


すべてのテストケースにおいて、以下の条件をみたします。

・ A, B は 0 または 1


入力例

0 0

出力例

0

排他的論理和は、Python 同様に ^ で求めることができる。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
  const [a,b] = lines[0].split(/\s/).map(Number);
  console.log(a ^ b);
});
Python
A,B = map(int,input().split())
print(A ^ B)

最後に

基本的には、よくある演算子で表現できるので分かりやすかったです。&& と & 、|| と | の違いとか、ちゃんと知っているといいかもしれない。

何で覚えたのかが思い出せないけれど、プログラミングを始めて初期のころにやった記憶があるなぁ、と。

引き続き、よろしくお願いいたします!

Python の第78回はこちら

第78回【Python】論理積( AND )の基本、論理和( OR )の基本、否定( NOT )の基本、排他的論理和( XOR )の基本記事

LeoSaki

旦那の方。 猫と嫁とのキャンプをこよなく愛する。 AWS 6 冠達成者。AWS 好き。 ITパスポート、基本情報技術者、応用情報技術者も取得しています。