循环移位:循环左移和循环右移

循环移位:循环左移和循环右移

循环移位就是把数值变成二进制,然后循环移动的过程;换句话说,循环移位就是将移出的低位放到该数的高位(循环右移)或把移出的高位放到该数的低位(循环左移),左移,和右移动都是对整数进行的操作,在Win32控制台应用程序中,整形占4Byte节32bit。

循环左移的过程:

循环左移的过程可以分为3步:

1. 将x左端的n位先移动到y的低n位中,x>>(32-n);

2. 将x左移n位,其右面低位补0,x<

3. 进行按位或运算(x >> (32 - n) | (x << n));

循环右移的过程:

循环右移的过程可以分为3步:

1. 将x的左端的低n位先移动到y的高n位中x<<(32-n)

2. 将x右移n位,其左面高n位补0x>>n;

3.进行按位或操作(x << (32 - n) | (x >> n));

假如将一个无符号的数据val,长度为N,需要循环移动n位。可以利用下面的公式:

循环左移:(val >> (N - n) | (val << n))

循环右移:(val << (32 - n) | (val >> n))

C语言实现循环移位:循环移位是对二进制序列进行操作,所以实现循环移位先需要将需要移位的数转换为二进制序列,然后按照上面描述的步骤进行移位,最后将移位后的二进制序列打印出来;

源代码

#include

#include

//将一个十进制数转换为二进制

void trans_binary(unsigned int val)

{

int a[32];

int i = 0;

for(i=0;i<=31;i++)

{

a[i] = val % 2;

val /= 2;

}

//倒序输出,每输出8位,输出一个空格

for (int j = 31,k = 1; j >= 0; j--,k++)

{

printf("%d", a[j]);

if (k % 8 == 0)

{

printf(" ");

}

}

printf("\n");

}

//循环左移

void left_move(unsigned val, int n)

{

unsigned int z;

printf("需要移位的二进制序列为:\n");

trans_binary(val);

z = (val >> (32 - n) | (val << n));

printf("移位后:\n");

trans_binary(z);

}

void right_move(unsigned val, int n)

{

unsigned int z;

printf("需要移位的二进制序列为:\n");

trans_binary(val);

z = (val << (32 - n) | (val >> n));

printf("移位后:\n");

trans_binary(z);

}

int main()

{

int num = 0;

int n = 0;

int select = 0;

printf("请输入要移位的数和移动位数:\n");

scanf("%d%d", &num, &n);

printf("请输入选择:(-1-:左移 -2-:右移 -0-:退出):\n");

scanf("%d", &select);

switch (select)

{

case 1:left_move(num, n);

printf("\n");

break;

case 2:right_move(num, n);

break;

case 0:exit(0);

break;

default:

printf("输入有误!\n");

break;

}

system("pause");

return 0;

}

运行结果

为了更直观的显示结果,选取了一个比较大的数1234567891,移动位数:8,移动方式:循环左移;根据循环左移的方法,先取出高8(移动的位数)位,移动到底8位(右移24位),然后将其余位数依此左移8位,结果与运行结果一致。

相关推荐

中国英雄联盟队 LOL中国有几个战队
英国beat365官方登录

中国英雄联盟队 LOL中国有几个战队

🗓️ 09-03 👁️ 837
青云志(2016)
beat365手机版官方网站

青云志(2016)

🗓️ 09-04 👁️ 1962
为什么天空是粉色的:光被吸收后折射出的颜色(红光和橙光)
英国beat365官方登录

为什么天空是粉色的:光被吸收后折射出的颜色(红光和橙光)

🗓️ 07-08 👁️ 7722
深刻理解“民心是最大的政治”的哲学内涵
365bet正网注册

深刻理解“民心是最大的政治”的哲学内涵

🗓️ 07-12 👁️ 9862
日本妹子手机里必用的9大APP!你装了几个?
beat365手机版官方网站

日本妹子手机里必用的9大APP!你装了几个?

🗓️ 09-01 👁️ 2552
EA认证到底是什么呢?
英国beat365官方登录

EA认证到底是什么呢?

🗓️ 07-10 👁️ 7291
为什么天空是粉色的:光被吸收后折射出的颜色(红光和橙光)
英国beat365官方登录

为什么天空是粉色的:光被吸收后折射出的颜色(红光和橙光)

🗓️ 07-08 👁️ 7722
磊科NW709( Netcore NW709 )
365bet正网注册

磊科NW709( Netcore NW709 )

🗓️ 08-18 👁️ 5886
拍照片曝光不会调?单反相机曝光模式详解!
365bet正网注册

拍照片曝光不会调?单反相机曝光模式详解!

🗓️ 07-03 👁️ 8326
什么是ug数控编程软件
英国beat365官方登录

什么是ug数控编程软件

🗓️ 07-20 👁️ 1728
国内Android培训机构推荐:从零基础到进阶,掌握Java与Kotlin编程精髓
哪里能买到正品精油?怎么识别?
beat365手机版官方网站

哪里能买到正品精油?怎么识别?

🗓️ 07-15 👁️ 7845