// 将一个数的二进制表示中从第 n 位(从右往左数)开始的 m 位设为另一个数的二进制表示的最后 m 位。 #include #include 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; }