C/C++可以通过位操作实现循环左移和循环右移。
循环左移的思路是把数的二进制位向左移动k位,并把超出第n位的二进制位移到最低n位,最高位填0。
公式为:(x<
示例:
假设x的二进制表示为11001100, k=3
则循环左移3位后,二进制结果为01100110。
编写C/C++代码如下:
unsigned int rotate_left(unsigned int x, unsigned int k) {
unsigned int n = sizeof(x) * 8;
return (x << k) | (x >> (n-k) & (pow(2,k)-1) << (n-k));
}
循环右移的思路是把数的二进制位向右移动k位,并把超出第n位的二进制位移到最高n位,最低位填0。
公式为:(x>>k)|(x<<(n-k)&(pow(2,k)-1)<<n-k)
示例:
假设x的二进制表示为11001100, k=3
则循环右移3位后,二进制结果为10011001。
编写C/C++代码如下:
unsigned int rotate_right(unsigned int x, unsigned int k) {
unsigned int n = sizeof(x) * 8;
return (x >> k) | (x << (n-k) & (pow(2,k)-1) << (n-k));
}
以上代码中的sizeof(x) * 8就是获得一个整型数x的二进制位数,在32位环境下是32位,在64位环境下是64位。pow(2,k)-1表示得到k位二进制数,最高位为1,其余位为0。
总结起来,使用位运算可以快速实现循环左移和循环右移,效率非常高,是常见的数值处理操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C/C++如何实现循环左移,循环右移 - Python技术站