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;//}return 0;
}
执行结果
2
原始数据的二进制16位表示: 0000000000000010
转换为32位后,右移之前的值:00000000000000000000000000000010
右移2位后结果: 10000000000000000000000000000000
本文的小技巧
输入16进制的方式
完整输入输出总结
cin >> hex >> a;
scanf_s("%hd", &a)
int型 输出x位二进制的方式
cout << bitset<32>(x) << endl;//如果输出64位,则填64
注意的地方
(这个地方如果是十进制输入,会栈溢出,为什么?因为定义在栈上的局部变量a为16位,如果按%d输入,则会占用32位,这样的话程序运行结束系统只会处理16位,剩下的16位就破坏了堆栈)
uint16 a;//cin >> hex >> a;scanf_s("%hd", &a);//16进制的两种输入方式
C/C++实现循环左移,循环右移相关推荐
- java byte 循环左移 循环右移 rotateLeft rotateRight
java byte 循环左移 循环右移 rotateLeft rotateRight 1.概念. 循环左移: eg1:byte in = (byte) 0x01;[0000 0001]则循环左移2位后 ...
- java循环左一_java实现循环左移和右移的简单算法
java实现循环左移和右移的简单算法 byte a=112,用程序实现,将其循环左移三位和右移三位. 112的二进制原码:0111 0000 112循环左移3位后的二进制码:1000 0011 112 ...
- c语言循环左移程序,用C语言实现循环左移,右移
C51中实现循环左移.右移的库函数: #includeunsigned char _crol_( unsigned char c, /*charactertorotateleft*/ unsigned ...
- 用python实现队列的循环左移和右移的实验原理_python的移位操作实现详解
因为要将js的一个签名算法移植到python上,遇到一些麻烦. int无限宽度,不会溢出 算法中需要用到了32位int的溢出来参与运算,但是python的int是不会溢出的,达到界限后会自己转为lon ...
- 基础篇-verilog-实现循环左移右移
//实现循环右移 reg [7:0] shifter; always(posedge clk ) begin shifter<={shifter[0],shifter[7:1]}; end // ...
- 一维数组反转c语言_C语言实现数组的循环左移,右移,翻转的示例
数组结合指针可以实现很多有趣的功能,比如下面这个程序: 假设数组为 : 12345 如果左移一次即为:23451 ,依次类推 如果右移一次即为:51234 ,依次类推 翻转则为:54321 我们来实现 ...
- 逻辑左移、逻辑右移、算术左移、算术右移、循环左移、循环右移
逻辑左移时,最高位丢失,最低位补0: 逻辑右移时,最高位补0,最低位丢失: 算术左移时,依次左移一位,尾部补0,最高的符号位保持不变. 算术右移时,依次右移一位,尾部丢失,符号位右移后,原位置上复制一 ...
- 循环移位之循环左移和循环右移
首先理解循环移位的意思:循环移位就是把数值变成二进制,然后循环移动的过程: 简单来说: 循环右移:二进制数的低位放到高位前面. 循环左移:二进制数的高位放到低位前面. 在Win32控制台应用程序中,整 ...
- 循环移位:循环左移和循环右移
循环移位就是把数值变成二进制,然后循环移动的过程:换句话说,循环移位就是将移出的低位放到该数的高位(循环右移)或把移出的高位放到该数的低位(循环左移),左移,和右移动都是对整数进行的操作,在Win32 ...
- c语言循环左移程序,C语言中关于循环左移和循环右移
昨天在解答同学的问题中,又接触了好久没碰的C中的位操作.在重接触的过程中,又理解了一遍计算机存储数据的细节,于是分享给大家看一下. 让我们先看一下题目:编写一个程序,输入两个整数i.j,如果j的值大于 ...
最新文章
- python的flask实现接口_使用python的Flask实现一个接口mock数据(傻瓜教程)
- 全能终端神器——MobaXterm
- c# 调用restful json_微服务调用为啥用RPC框架,http不更简单吗?
- 双 11 模块 79.34% 的代码是怎样智能生成的?
- 2022年数据库云管平台白皮书
- cannot import name UnrewindableBodyError
- shell数值运算的方法
- C#中的DES加解密方法
- 方维模板修改,发布分享、主题有商品时,标签需自动写到input里,不要再手动去点击添加,手动点击可取消...
- 线程的五大状态及转换
- 手机闪存速度排行_2020年手机性能排行榜前十
- [转]Spring 注解总结
- 计算机组成原理唐朔飞重点,计算机组成原理唐朔飞高分笔记
- (云苍穹)表单插件常用代码
- 状压DP——子集DP
- HDU 5857 Median(水~)
- IDM与其他下载器加速器优缺点介绍
- 【平衡二叉树】超市促销
- PLC控制系统的软件设计
- 以太网物理层IOP测试设备TESTBASE-EIOP