&演算子・ビット単位の論理積演算/10進数を2進数に変換しビット論理積を求める

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

&演算子は、ビット単位の論理積(AND)を返します。
2つのビットを比較し、どちらも1の場合に、1となります。
なじみのある論理積(&&)は、オペランドが両方trueの場合にtrueを返しますが、ビット単位の論理積もそのイメージに近いです。

スポンサーリンク

たとえば、2進数の次の2つの数字の論理積は・・・

   1101
& 0110
-------
   0100

となります。

10進数の数字を2つ入力して、2進数として表示し、2つの数字(10進数)の論理積を求めるプログラムを作ってみました。(正数のみ正常動作します。)

#include <iostream>
 
int num1, num2;
 
int tobinary(int number) {
    int bit;
    int binary[100];
    int count = 0;
    while (true) {
        bit = number % 2;
        number = number / 2;
        binary[count] = bit;
        if (number == 0) {
            break;
        }
        count++;
    }
    for (int i = count; i >= 0; i--) {
        std::cout << binary[i];
    }
    return (0);
}
 
int main() {
    while (true) {
        std::cout << "Enter decimal number: ";
        std::cin >> num1 >> num2;
        std::cout << "decimal " << num1 << " to binary : ";
        tobinary(num1);    // num1を2進数表示
        std::cout << "\n";
        std::cout << "decimal " << num2 << " to binary : ";
        tobinary(num2); // num2を2進数表示
        std::cout << "\n";
        std::cout << num1 << " & " << num2 << " = ";
        tobinary(num1 & num2); // num1とnum2のビット論理積を2進数表示
        std::cout << "\n";
    }
    return 0;
}

tobinary関数は、2進数・8進数・16進数・10進数と変換方法で書いた、10進数を2進数に変換する方法(2で割って余りを求めるていく方法)を、コードで書いたものです。
数字の並びを逆さまにするために、余り(0または1のビット数)を配列に格納していき、for文で逆順に表示しています。

実行結果。

Enter decimal number: 25 58
decimal 25 to binary : 11001
decimal 58 to binary : 111010
25 & 58 = 11000
Enter decimal number: 1024 64
decimal 1024 to binary : 10000000000
decimal 64 to binary : 1000000
1024 & 64 = 0
Enter decimal number: 32 16
decimal 32 to binary : 100000
decimal 16 to binary : 10000
32 & 16 = 0
Enter decimal number: 135  29
decimal 135 to binary : 10000111
decimal 29 to binary : 11101
135 & 29 = 101

桁がそろってないのは、ご容赦を。
適宜、頭に0を付けて読んでみてください。

たとえば、最後の実行結果・・・

decimal 135 to binary : 10000111
decimal 29 to binary : 11101

論理積は、

   10000111
& 00011101
-----------
   00000101

ですから・・・

135 & 29 = 101

で、ちゃんと正解が出てますね。

スポンサーリンク
 
スポンサーリンク