【luogu题解】T378828 位运算

位运算

题目背景

题目由 daiyulong20120222 创作(me)

并由
QBW1117完善以及数据 。

题目描述

给定两个数(x,y) ,在给定一个位运算符号 (c)

请你列出 (x,y) 进行 (c) 位运算是的算数竖式式。

注:

  1. 竖式这么列:

    • 显示出两个数的完整二进制,包括前导零。

    • 32个 '-'。

    • 显示出 (ans) ,包括前导零。

  2. 位运算符号可能是:

    • &

    • |

    • ^

输入格式

三个整数(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; } 

发表评论

评论已关闭。

相关文章