qfedu-basic-level/day7/homework/h17.cpp

37 lines
1.3 KiB
C++
Raw Permalink Normal View History

2023-06-21 11:31:26 +08:00
// 将一个数的二进制表示中从第 n 位(从右往左数)开始的 m 位设为另一个数的二进制表示的最后 m 位。
#include <iostream>
#include <bitset>
using namespace std;
int main()
{
int num1, num2, n, m;
cout << "请输入两个整数: ";
cin >> num1 >> num2;
cout << "请输入起始位n和位数m: ";
cin >> n >> m;
cout << "开始的 num1 二进制为: " << bitset<32>(num1) << endl;
cout << "开始的 num2 二进制为: " << bitset<32>(num2) << endl;
// 对 num1 进行预处理
int mask = (1 << m) - 1; // 生成 m 位全 1 的掩码
int mask_2 = mask; //一份 mask 拷贝, 用于后续处理 num2
mask = mask << n; // mask 左移 n 位
mask = ~mask; // mask 掩码按位取反
num1 &= mask; // 将 num1 从第 n 位开始 (从右向左) 的 m 位重置为 0
cout << "预处理后 num1 二进制为: " << bitset<32>(num1) << endl;
// 对 num2 进行预处理
num2 &= mask_2; // 保留 num2 的后 m 位, 其余位重置为0
num2 = num2 << n; // num2 再向左移位 n
cout << "预处理后 num2 二进制为: " << bitset<32>(num2) << endl;
// 将处理后的 num1 和 num2 相或
num1 |= num2;
cout << "处理后的 num1 二进制为: " << bitset<32>(num1) << endl;
return 0;
}