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

相关推荐
AI玫瑰助手6 小时前
Python函数:默认参数的定义与注意事项
开发语言·python·信息可视化
油炸自行车6 小时前
Claude Code 错误:API Error: 400 Failed to deserialize the JSON body into the
开发语言·javascript·json·trae·claude code·api error 400
肩上风骋6 小时前
C++14特性
开发语言·c++·c++14特性
JAVA社区8 小时前
Java高级全套教程(十)—— SpringCloudAlibaba超详细实战详解
java·开发语言·spring cloud·面试·职场和发展
弥树子8 小时前
踩坑记录:服务器内网调用接口,真实请求URL与官方公开URL不一致问题排查
开发语言·php
z落落8 小时前
C# ToCharArray + foreach遍历 + String与StringBuilder
开发语言·c#
Bluetooth7308 小时前
c语言一维数组
c语言
学代码的真由酱8 小时前
Java多用户一对一网页聊天室-测试报告
java·开发语言·功能测试·测试
人道领域8 小时前
【LeetCode刷题日记】669.修剪二叉搜索树
开发语言·python·算法
xiaoshuaishuai89 小时前
C# AvaloniaUI动态显示图片
开发语言·c#