位運算 題目背景 題目由 daiyulong20120222 創作(me) 並由 QBW1117完善以及數據 。 題目描述 給定兩個數\(x,y\) ,在給定一個位運算符號 \(c\)。 請你列出 \(x,y\) 進行 \(c\) 位運算是的算數豎式式。 註: 豎式這麼列: 顯示出兩個數的完整二進位 ...
位運算
題目背景
題目由 daiyulong20120222 創作(me)
並由
QBW1117完善以及數據 。
題目描述
給定兩個數\(x,y\) ,在給定一個位運算符號 \(c\)。
請你列出 \(x,y\) 進行 \(c\) 位運算是的算數豎式式。
註:
-
豎式這麼列:
-
顯示出兩個數的完整二進位,包括前導零。
-
32個 '-'。
-
顯示出 \(ans\) ,包括前導零。
-
-
位運算符號可能是:
-
&
-
|
-
^
-
輸入格式
三個整數\(x,y,c\)同題意
輸出格式
豎式結果
樣例 #1
樣例輸入 #1
32 21 &
樣例輸出 #1
00000000000000000000000000100000
00000000000000000000000000010101
--------------------------------
00000000000000000000000000000000
題解
做這道題有3種方法。
方法一:進位轉換(字元串)
這種方法在此不做過多的贅述,有興趣的同學可以翻看一些luogu進位轉換的題解。
不過真的是太簡單啦!
方法二:位運算&狀態壓縮
這種方法也在此不做過多的贅述。
不過也真的是太簡單啦!
·····方法三:bitset庫函數
在C++中:有一個庫函數 bitset
頭文件:#include<bitset>
詳見請查看此鏈接
AC code
#include <iostream>
#include <bitset>
using namespace std;
string performBitOperation(int x, int y, char op) {
bitset<32> binaryX(x);
bitset<32> binaryY(y);
bitset<32> result;
switch (op) {
case '&':
result = binaryX & binaryY;
break;
case '|':
result = binaryX | binaryY;
break;
case '^':
result = binaryX ^ binaryY;
break;
default:
cout << "Invalid operator!" << endl;
return "";
}
string binaryXStr = binaryX.to_string();
string binaryYStr = binaryY.to_string();
string resultStr = result.to_string();
string separator(32, '-');
string output = binaryXStr + "\n" + binaryYStr + "\n" + separator + "\n" + resultStr;
return output;
}
int main() {
int x, y;
char op;
cin >> x >> y >> op;
string result = performBitOperation(x, y, op);
cout << result << endl;
return 0;
}