这篇文章主要介绍了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++如何实现循环左移,循环右移
猜你喜欢
- ubuntu下C/C++获取剩余内存 2023-09-18
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- Qt计时器使用方法详解 2023-05-30
- Easyx实现扫雷游戏 2023-02-06
- C语言详解float类型在内存中的存储方式 2023-03-27
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- C语言qsort()函数的使用方法详解 2023-04-26
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- C++ 数据结构超详细讲解顺序表 2023-03-25
