&演算子・ビット単位の論理積演算/10進数を2進数に変換しビット論理積を求める
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
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
で、ちゃんと正解が出てますね。
スポンサーリンク
>> 次の記事 : <<演算子(左シフト)と>>演算子(右シフト)・ビット単位のシフト演算
<< 前の記事 : ビット演算の基礎/進数とビット・バイト
スポンサーリンク