C语言什么是循环移位?

一、问题

左移位是将⼆进制位的数据向左移动,移动位数由移位运算符右侧的⼗进制整数决定。向右移位与向左移位相似,只是⽅向不同。那什么是循环移位?

二、解答

循环移位就是在移位的过程中,不丢失移位前原操作数的位,⽽是将移出的⼆进制位数据写⼊需要补位的位置。循环移位的结果如下所示。

下⾯举例说明循环移位的过程。例如,要求将⼗六进制数 a 进⾏左循环移位。为实现循环左移,有如下算法步骤。

(1)将 a 的左端 n 位先放到 b 中的低 n 位。可以⽤如下语句实现。

cpp 复制代码
b=a>>(16-n);

(2)将 a 左移 n 位,其左⾯低 n 位补 0 。可以⽤如下语句实现。

cpp 复制代码
c=a<<n;

(3)将c与b进⾏按位或运算。即:

cpp 复制代码
c=c|b;

这样就实现了循环左移。循环右移可以采⽤同样的思想。

说明:

在进⾏移位运算时,采⽤⼗六进制数更能清晰地观察出变化。

⽤⼗六进制数实现循环左移的实例程序如下。

cpp 复制代码
mian()
{
    unsigned a, b, c, n, z;
    scanf("a=%x,n=%d", &a, &n);
    b = a >> (16 - n);
    printf("b=%x\n", b);
    c = a << n;
    printf("c=%x\n", c);
    z = c | b;
    printf("z=%x\n%x\n", a, z);
}

程序运⾏结果如下所示。

cpp 复制代码
a=0001,n=3
b=0
c=8
1
8

三、总结

在循环移位的算法步骤中,重要的是要理解(3)的或运算,按位或运算可以使得到的 z 保持 b 的⾼位和 c 的低位均不变。

相关推荐
四维碎片5 小时前
【Qt】线程池与全局信号实现异步协作
开发语言·qt·ui·visual studio
IT码农-爱吃辣条5 小时前
Three.js 初级教程大全
开发语言·javascript·three.js
☺����5 小时前
实现自己的AI视频监控系统-第一章-视频拉流与解码2
开发语言·人工智能·python·音视频
染翰6 小时前
lua入门以及在Redis中的应用
开发语言·redis·lua
王者鳜錸6 小时前
PYTHON让繁琐的工作自动化-函数
开发语言·python·自动化
兔老大RabbitMQ6 小时前
git pull origin master失败
java·开发语言·git
tt5555555555556 小时前
C/C++嵌入式笔试核心考点精解
c语言·开发语言·c++
xiao助阵6 小时前
python实现梅尔频率倒谱系数(MFCC) 除了傅里叶变换和离散余弦变换
开发语言·python
科大饭桶7 小时前
C++入门自学Day14-- Stack和Queue的自实现(适配器)
c语言·开发语言·数据结构·c++·容器
扛麻袋的少年8 小时前
7.Kotlin的日期类
开发语言·微信·kotlin