C语言问题描述】位运算中,左移右移移出的位被丢掉,不能构成循环移位。编程实现逻辑循环左移和右移。输入1,循环逻辑左移,输入2,循环逻辑右移。 【输入形式】输入一个10进制数n(只能输入1或2),和一个16进制数m,比如0x01(一个字节)。 【输出形式】循环输出m移位后的值的二进制代码。0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x01的二进制代码,一行一个数。 【样例输入】1 0x01 【样例输出】 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000 00000001 【样例说明】输入n=1,循环左移,n=2,循环右移。每次m移位一次后调用函数,将m转换成8位二进制位输出。
时间: 2024-03-26 17:35:20 浏览: 94
单片机C语言实现循环移位!
5星 · 资源好评率100%
以下是C语言的代码实现:
```c
#include <stdio.h>
// 循环逻辑左移
unsigned char leftRotate(unsigned char num, int shift) {
return (num << shift) | (num >> (8 - shift));
}
// 循环逻辑右移
unsigned char rightRotate(unsigned char num, int shift) {
return (num >> shift) | (num << (8 - shift));
}
int main() {
int n;
unsigned char m;
scanf("%d %hhx", &n, &m); // %hhx 用于读取一个字节的16进制数
for (int i = 0; i < 9; i++) {
printf("%08b\n", m); // %08b 用于输出8位二进制数
if (n == 1) {
m = leftRotate(m, 1); // 循环逻辑左移1位
} else {
m = rightRotate(m, 1); // 循环逻辑右移1位
}
}
return 0;
}
```
程序先读入一个整数n和一个字节大小的十六进制数m,然后循环移位并输出移位后的二进制数。对于循环逻辑移位,我们可以通过位运算实现。函数leftRotate表示循环逻辑左移,用一个8位的数num和一个移位位数shift作为参数,返回移位后的结果。函数rightRotate表示循环逻辑右移,用法类似。在主函数中,我们使用循环输出移位后的二进制数,如果n为1,则进行循环逻辑左移,否则进行循环逻辑右移。
阅读全文