c语言实现循环左移,c语言 循环右移

c语言实现循环左移,c语言 循环右移,C/C++如何实现循环左移,循环右移

本文主要介绍了C/C如何循环左移和循环右移,有很好的参考价值。希望对大家有帮助。有很好的参考价值,希望对大家有所帮助。如有错误或不足之处,请不吝赐教。

目录

实现可直接用于无符号数的循环左移和循环右移(循环右移,循环左移)的函数。本文提示的全部代码:注意,局部字符串循环左移|右移实现(C/C)字符串循环右移K位字符串循环左移K位循环左移相同的结果。

实现对一个无符号数的循环左移和循环右移

循环移位直接可用的函数(循环右移、循环左移)

//val表示要移位的数字。n表示移位的位数。//字节数乘以8表示总位数。//循环右移N位的结果:假设数据共有size位,先将size-n位左移,然后用原数右移N位,得到OR运算的结果。

//val表示要移位的位数,N表示移位的位数。

//字节数乘以8代表总位数。

//循环右移N位的结果:假设数据共有size位,将size-n位左移,然后用原数右移N位,得到OR运算的结果。

uint32 bit_move(uint32 val,int n) {

uint 32 size=sizeof(val)* 8;

n=n %大小;

//return(val(size-n)|(val n));//向左移动

return(val(size-n)|(val n));//向右移动

}

整体代码

如果头文件有错误,去我的主页搜索关键词“bits/stdc。h "

#includebits/stdc。h

使用命名空间std

typedef无符号短整型uint16

typedef无符号int uint32

uint32 bit_move(uint32 val,int n) {

uint 32 size=sizeof(val)* 8;

n=n %大小;

//return(val(size-n)|(val n));

return(val(size-n)|(val n));

}

int main() {

uint 16 a;

//cin十六进制a;

scanf_s('%hd ',a);//十六进制的两种输入法(如果这个地方是十进制输入,堆栈会溢出。为什么?)

cout原始数据的16位二进制表示形式:“bitset 16(a)endl;

uint 32 a1=(uint 32)a;

cout '转换为32位后,右移前的值:' bitset 32(a1)endl;

uint32 res=bit_move(a1,2);

“Cout”右移2位,结果是:“bit set 32(RES)endl;

//for(int I=1;i3;i ) {

//a1=bit_move(a1,1);

//cout '右移' I '位结果:' bit set 32(a1)endl;

//}

返回0;

}

执行结果

2

原始数据的16位二进制表示:00000000000010

转换为32位后,右移前的值:00000000000000000000000000010

右移2位后的结果:10000000000000000000000000000000

本文的小技巧

输入十六进制方法。

cin十六进制a;

scanf_s('%hd ',a)

int类型输出x位二进制。

cout位集32(x)endl;//如果输出64位,则填入64位。

注意的地方

如果这个位是十进制输入,堆栈就会溢出。为什么?因为栈上定义的局部变量A是16位的,如果按下%d,会占用32位。这种情况下,程序运行后系统只会处理16位,剩下的16位会销毁堆栈。

uint 16 a;

//cin十六进制a;

scanf_s('%hd ',a);//十六进制的两种输入模式

字符串循环左|右移实现(C/C++)

字符串循环右移K位

(1)图形思维

(2)代码实现

时间复杂度O(n) |空间复杂度O(1)

//实现三翻。

#包括iostream

#包括cstring

void reverse(char str[],int start,int end){

for(;开始结束;开始,结束- ){

char tmp=str[start];

str[start]=str[end];

str[end]=tmp;

//启动;

//end-;

}

}

void rotater right(char str[],int offset,int len){

if(str==nullptr || len==0){

返回;

}

offset=offset % len

//翻转三次

reverse(str,0,len-offset-1);

reverse(str,len-offset,len-1);

reverse(str,0,len-1);

}

int main(){

int steps=2;

char str[]=' 12ab ';

int len=strlen(str);

//printf('len=%d\n ',len);

Printf('移动前:%s\n ',str);

rotateStrRight(字符串、步骤、长度);

Printf('移动后:%s\n ',str);

}

字符串循环左移K位

(1)描述

#字符串向左循环移动

(1)左移和右移一样,只是段的划分方向相反,交换间隔自然不同。

(2)例如:1234ab,循环左移4位(从左划分)

(3)1234 | a b-4321 | a b-4321 | ba-ab 1234

(4)例如:1234ab,循环右移四位

(5)12 | 34ab-21 | 34ab-21 | ba43-34ab 12

(2)代码实现

//三次翻转实现

#包括输入输出流

#包括cstring

void reverse(char str[],int start,int end){

for(;开始结束;开始,结束- ){

char tmp=str[start];

str[start]=str[end];

str[end]=tmp;

}

}

void rotator left(char str[],int offset,int len){

if(str==nullptr || len==0){

返回;

}

偏移=偏移% len

//三次翻转

reverse(str,0,offset-1);

reverse(str,offset,len-1);

reverse(str,0,len-1);

}

int main(){

int steps=3;

char str[]=' 1234 ab ';//4ab123

int len=strlen(str);

//printf('len=%d\n ',len);

printf('移动前:%s\n ',str);

rotateStrLeft(字符串、步骤、长度);

printf('移动后:%s\n ',str);

}

循环左右移结果相同条件

(1)字符串长度/2=偏移量

(2)测试结果(8/2=4)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: