这篇文章主要介绍了C/C++如何实现循环左移,循环右移,具有很好的参考价值,希望对大家有所帮助。具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
实现对一个无符号数的循环左移和循环右移
循环移位直接可用的函数(循环右移、循环左移)
- //val表示需要移位的数 n表示移位位数
- //字节数乘以8代表一共多少位
- //向右循环移n位的结果:假设数据一共size位,向左移size-n位,再与原数右移n位进行或操作的结果
//val表示需要移位的数 n表示移位位数
//字节数乘以8代表一共多少位
//向右循环移n位的结果:假设数据一共size位,向左移size-n位,再与原数右移n位进行或操作的结果
uint32 bit_move(uint32 val, int n) {
uint32 size = sizeof(val) * 8;
n = n % size;
//return (val >> (size - n) | (val << n));//左移
return (val << (size - n) | (val >> n));//右移
}整体代码
如果出现头文件报错,去我主页搜关键词“bits/stdc++.h”
#include<bits/stdc++.h>
using namespace std;
typedef unsigned short int uint16;
typedef unsigned int uint32;
uint32 bit_move(uint32 val, int n) {
uint32 size = sizeof(val) * 8;
n = n % size;
//return (val >> (size - n) | (val << n));
return (val << (size - n) | (val >> n));
}
int main() {
uint16 a;
//cin >> hex >> a;
scanf_s("%hd", &a);//16进制的两种输入方式 (这个地方如果是十进制输入,会栈溢出,为什么?)
cout << "原始数据的二进制16位表示: " << bitset<16>(a) << endl;
uint32 a1 = (uint32)a;
cout << "转换为32位后,右移之前的值:" << bitset<32>(a1) << endl;
uint32 res = bit_move(a1, 2);
cout << "右移2位后结果: " << bitset<32>(res) << endl;
//for (int i = 1; i < 3; i++) {
// a1 = bit_move(a1, 1);
// cout << "右移"<< i << "位后结果: "<< bitset<32>(a1) << endl;
/
织梦狗教程
本文标题为:C/C++如何实现循环左移,循环右移
基础教程推荐
猜你喜欢
- 全面了解C语言 static 关键字 2023-03-26
- C++实战之二进制数据处理与封装 2023-05-29
- [C语言]二叉搜索树 2023-09-07
- C语言编程C++旋转字符操作串示例详解 2022-11-20
- C语言 详解字符串基础 2023-03-27
- C语言实现宾馆管理系统课程设计 2023-03-13
- centos 7 vscode cmake 编译c++工程 2023-09-17
- C++实现ETW进行进程变动监控详解 2023-05-15
- [c语言-函数]不定量参数 2023-09-08
- 带你深度走入C语言取整以及4种函数 2022-09-17
