1 /*
2 * FILE: p135_circle_shift.c
3 * DATE: 20180110
4 * ---------------
5 * DESCRIPTION: 循环右移
6 * step 1: 将a右端(低位)的n位放到b中的高位;
7 * step 2:将a右移n位,高位补0
8 * step 3:将b和c进行 | 运算
9 */
10
11 #include <stdio.h>
12
13 int rightShift(int a, int n)
14 {
15 int b, c;
16 b = a << (32-n); // 保留a的低n位
17 c = a >> n;
18 // 保证c的高位不会出现由于移位产生的1的干扰
19 c = c & ~(~0 << (32-n));
20 c = c | b; // 将两部分拼接,完成循环右移
21 return c;
22 }
23
24 int main(int argc, char *argv[])
25 {
26 int val;
27 fprintf(stdout, "Please input an integer: ");
28 scanf("%d", &val);
29 printf("the original: 0x%x\n", val);
30 printf("the result: 0x%x\n", rightShift(val, 4));
31 return 0;
32 }
循环右移, c = c & ~(~0 << (32-n))
最新推荐文章于 2021-08-31 01:05:43 发布