首页 > 试题广场 >

【模板】位运算Ⅲ ‖ 混合运算

[编程题]【模板】位运算Ⅲ ‖ 混合运算
  • 热度指数:211 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}对于给定的 12 位无符号整数 x,你需要书写一个程序,使得其能够支持如下操作:
\hspace{23pt}\bullet\,操作一:整体左移,将整数 x 二进制表示下的所有位向左移动 p 位后,输出得到的十进制整数,超出 12 位的高位丢弃,低位补 0
\hspace{23pt}\bullet\,操作二:整体右移,将整数 x 二进制表示下的所有位向右移动 p 位后,输出得到的十进制整数,溢出的低位丢弃,高位补 1
\hspace{23pt}\bullet\,操作三:按位赋 0,将整数 x 二进制表示下的第 p 位(以右侧为低位,从 0 数起)赋值为 0,输出得到的十进制整数;
\hspace{23pt}\bullet\,操作四:按位赋 1,将整数 x 二进制表示下的第 p 位(以右侧为低位,从 0 数起)赋值为 1,输出得到的十进制整数。

输入描述:
\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leq T\leq 10^5\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}在一行上输入三个整数 o,x,p \left(1\leq o\leq 4;\,0\leq x<2^{12};\,0\leq p<12\right),表示操作类型、初始整数、操作参数。操作类型对应上述四种操作。


输出描述:
\hspace{15pt}对于每组测试数据,新起一行输出一个整数,表示操作后的结果。
示例1

输入

4
1 1023 3
2 910 5
3 256 8
4 3 8

输出

4088
3996
0
259

说明

\hspace{15pt}对于第一组测试数据,1023 的二进制表示为 (0011\,1111\,1111)_2,整体左移 3 位后得到 (1111\,1111\,1{\color{orange}{000}})_2=4088
\hspace{15pt}对于第二组测试数据,910 的二进制表示为 (0011\,1000\,1110)_2,整体右移 5 位后得到 ({\color{orange}{1111\,1}}001\,1100)_2=3996
\hspace{15pt}对于第三组测试数据,256 的二进制表示为 (1\,0000\,0000)_2,将第 8 位赋值为 0 后得到 ({\color{orange}{0}}\,0000\,0000)_2=0
\hspace{15pt}对于第四组测试数据,3 的二进制表示为 (11)_2,将第 8 位赋值为 1 后得到 ({\color{orange}{1}}\,0000\,0011)_2=259
头像 周康禧
发表于 2025-12-09 10:51:59
#include <bits/stdc++.h> using namespace std; using ll = long long int; using ld = long double; using PII=pair<ll,ll>; using PIII=pair< 展开全文
头像 小狐今天睡大觉
发表于 2025-12-18 00:55:47
#include <bitset> #include <iostream> using namespace std; int main() { int t,o,x,p; cin>>t; while(t--){ cin> 展开全文
头像 ddb酱
发表于 2025-11-24 19:57:43
#include <bits/stdc++.h> using namespace std; #define endl "\n" #define int long long void solve() { int o, x, p;cin >> o & 展开全文
头像 Drink0318
发表于 2025-12-17 11:31:00
import sys # 预计算12位掩码(0xFFF = 4095) mask_12bit = 0xFFF data = list(sys.stdin.read().splitlines()) n = int(data[0]) for i in range(1,n+1): op,x,p=m 展开全文