《C程序设计语言》练习 2-8
2017-12-28 18:12
190 查看
练习 2-8
编写一个函数 rightrot(x, n),该函数返回将 x 循环右移(即从最右端
移出的位将从最左端移入)n(二进制)位后所得到的值。
用了循环和判断,感觉不太好
这个直接输出很难看,我测试的时候是打印的二进制01码
加上打印二进制的完整代码
编写一个函数 rightrot(x, n),该函数返回将 x 循环右移(即从最右端
移出的位将从最左端移入)n(二进制)位后所得到的值。
用了循环和判断,感觉不太好
int rightrot(int x, int n) { int b, c; c = ~0U >> 1; while (n > 0) { b = x & 1; x = x >> 1; if (b) x = x | ~c; else x = x & c; n--; } return x; }
这个直接输出很难看,我测试的时候是打印的二进制01码
加上打印二进制的完整代码
#include <stdio.h> int rightrot(int x, int n); void printBirany(int x, int bit); main() { int x = 123; x = rightrot(x, 5); printf("%d\n", x); } int rightrot(int x, int n) { //printBirany(x, 32); int b, c; c = ~0U >> 1; // 0x80000000 最左位是0,其他的是1 while (n > 0) { //保存位移前最右的值 b = x & 1; x = x >> 1; //根据位移前最右的值,改变位移后最左 if (b) x = x | ~c; else x = x & c; n--; //printBirany(x, 32); } return x; } void printBirany(int x, int bit) { int i; for (i = 0; i < bit; i++) { printf("%d", (x >> (bit - i - 1) & 1)); if ((i + 1) % 4 == 0) putchar(' '); } printf("\n"); }
相关文章推荐
- 《C程序设计语言》练习 3-3
- 《C程序设计语言》练习 1-6,1-7
- 《C程序设计语言》练习 2-6
- 《C程序设计语言》练习 3-4
- 《C程序设计语言》学习笔记——练习2-1
- 《C程序设计语言》学习笔记——练习2-4
- 《C程序设计语言》练习 4-2
- 《C程序设计语言》练习1-5
- 《C程序设计语言》练习1-10
- 《C程序设计语言》练习2-1答案
- 《C程序设计语言》学习笔记——练习2-5
- 《C程序设计语言》练习 4-3
- 《C程序设计语言》练习1-9
- 《C程序设计语言》练习 3-6
- 《C程序设计语言》练习 4-4
- C程序设计语言练习2-4
- 《C程序设计语言》练习 2-9
- 《C程序设计语言》学习笔记——练习1-20
- 《C程序设计语言》学习笔记——练习3-1