【模板】位运算Ⅱ ‖ 整体位移
题号:NC308237
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}对于给定的 12 位无符号整数 x,你需要书写一个程序,使得其能够支持如下操作:
\hspace{23pt}\bullet\,操作一:整体左移,将整数 x 二进制表示下的所有位向左移动 p 位后,输出得到的十进制整数,低位补 0
\hspace{23pt}\bullet\,操作二:整体右移,将整数 x 二进制表示下的所有位向右移动 p 位后,输出得到的十进制整数,溢出的低位丢弃,高位补 0

输入描述:

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

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

输出描述:

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

输入

复制
2
1 255 3
2 255 3

输出

复制
2040
31

说明

\hspace{15pt}对于第一组测试数据,255 的二进制表示为 (1111\,1111)_2,整体左移 3 位后得到 (0111\,1111\,1000)_2=2040
\hspace{15pt}对于第二组测试数据,255 的二进制表示为 (1111\,1111)_2,整体右移 3 位后得到 (0000\,0001\,1111)_2=31