位操作(Ⅲ)
描述
给定一个整数x,可以得到x的二进制表示,在x的二进制表示中,最右边的位记为第0位,然后往左依次是第1位,第2位,....。
请设计一个函数getbits(x, p, n),它返回整数x的二进制表示中从右边数第p位开始再向右数n位的字段。n与p都是合理的正值。
例如,getbits(114, 5, 2)返回1。
因为114的二进制表示如下
二进制:0 1 1 1 0 0 1 0
位编号:7 6 5 4 3 2 1 0
则右边起第5位开始往右2位分别为第5位和第4位,对应的二进制为11(对应十进制是3)。
输入
输入数据有多组。
每组第一行,是一个整数x(0<=x<=65535);
第二行是两个整数p,n,它们以空格隔开,表示从右边数第p位开始向右数n位。
输出
对于每组输入数据,输出一行。
输入样例 1
114 5 2 18 5 2 24 4 3
输出样例 1
3 1 6
提示
HINT 时间限制:200ms 内存限制:64MB
#include <iostream>
using namespace std;
int getbits(int x, int p, int n) {
// 创建一个掩码,掩码的低n位为1
int mask = (1 << n) - 1;
// 提取从p位开始的n位,并右移到最低位
return (x >> (p - n + 1)) & mask;
}
int main() {
int x, p, n;
while (cin >> x) {
cin >> p >> n;
cout << getbits(x, p, n) << endl;
}
return 0;
}
249

被折叠的 条评论
为什么被折叠?



