【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

C++ 复制代码
#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;
}