[问题描述]
假设有一 16 位的无符号整数, 可以对其二进制数据进行循环右移操作, 右移后仍然是无符号整数. 编写程序从控制台读入要右移的整数和循环右移的位数, 求得并输出循环右移后的十进制数据.
[输入形式]
从控制台输入要右移的十进制整数 (大于等于 0, 小于等于 65535) 和循环右移的位数 (大于等于 0, 小于等于 16), 两整数之间用一个空格分隔.
[输出形式]
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- using namespace std;
- int s[16];
- int main() {
- int n;
- int m;
- cin>> n>> m;
- m %= 16;
- int index = 0;
- while (n != 0) {
- s[index++] = n % 2;
- //cout << s[index - 1];
- n /= 2;
- }
- int sum = 0;
- int t = 1;
- for (int i = m; i < 16; i++) {
- //cout << t << " " << s[i] << endl;
- sum = sum + t * s[i];
- t = t * 2;
- }
- for (int i = 0; i < m; i++) {
- //cout << t;
- sum = sum + t * s[i];
- t = t * 2;
- }
- cout << sum;
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2975887.html