37 lines
1.3 KiB
C++
37 lines
1.3 KiB
C++
// 将一个数的二进制表示中从第 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;
|
|
} |