1204: 移位运算(C)
一、题目
http://acm.wust.edu.cn/problem.php?id=1204&soj=0
二、分析
- 无符号短整数关键字为:unsigned short;
- 无符号短整数长为2字节,16位,最左边(最高位)下标为15,最右边(最低位)下标为0;
- 从第m位向左数n位,取出作为新数的最高位,右边补零;
- 无符号短整数输入输出格式为:%hu;
- 多组输入。
三、思路
参考链接:百度文库-C语言实验报告-第8页
将x向右移动m位,再向左移动16-n位。
输入:
12345 10 4
12345的二进制为: 0011 0000 0011 1001
取出的数为: 11 00
右边还有m位
向右移动10位后: 0000 0000 0000 1100
此时左边还有16-n位
再向左移动12位后:1100 0000 0000 0000
转成十进制为:49152
四、代码
#include<stdio.h>
int main() {
unsigned short x, m, n;
while (scanf("%hu%hu%hu", &x, &m, &n) != EOF) {
x = x >> m << 16 - n; // 先向右移m位,再向左移16-n位
printf("%hu\n", x);
}
return 0;
}