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 的低位均不变。

相关推荐
2601_966949655 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
晨曦中的暮雨7 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
喵了几个咪7 小时前
GoWind CMS 拆解:在 Go 里给 TipTap 搭一套 Yjs 协同后端
开发语言·后端·golang
程序员清风7 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
2601_962885729 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
Wang's Blog10 小时前
Java 项目实战: 交友项目 - 圈子功能实现:总结
java·开发语言·交友
下一站春风里10 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
天外飞雨道沧桑11 小时前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程
hhhjhl11 小时前
Yup 跨端三方库仓颉适配全流程
java·开发语言
运维行者_12 小时前
网络监控工具怎么选?从设备监控到智能运维的能力清单
运维·服务器·开发语言·网络·人工智能·支持向量机·php