位运算
题目背景
题目由 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; }