c语言 循环左移

Python014

c语言 循环左移,第1张

#include<stdio.h>

#define N 10

void fun(int *a,int n,int x) { int i,j,k

for ( i=0i<xi++ ) { k=a[0]for ( j=0j<n-1j++ ) a[j]=a[j+1]a[n-1]=k}

}

void main() { int a[N],i,x

printf("Enter %d integers: ",N)for ( i=0i<Ni++ ) scanf("%d",&a[i])

printf("Enter x: ")scanf("%d",&x)

fun(a,N,x)

printf("After Circle left shift %d bit: ",x)for ( i=0i<Ni++ ) printf("%d ",a[i])

printf("\n")

}

C语言中没有循环移位,只有移位。

就是遇到边界时,会被截断的,例如11110000左移2位就是11000000

当然,你这里的0x38,循环左移2位,和左移2位没什么区别,因为边界值都是0,但是像刚刚的11110000的循环左移和左移2位,就相差很大了。

如果你需要循环的话,可以这样使用:

a=0x38

b=a>>6

a=a<<2

a=b|a

a这个时候就是循环左移了两位。

如果需要左移而已,就如三楼所说。

还有,就像3楼说的,左移相当于乘,数会变大,右移相当于除,变小。具体如下:

左移N位,就相当于原来的值乘以2的N次幂;

右移N位,如果非负数的话,就是原来的值除以2的N次幂。

希望对你有用。

在C中,左移是逻辑算术,右移是算术右移,会保持符号位不变.实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多.1、左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如:inti=1i=i<<2//把i里的值左移2位也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了。2、右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:inti=0x80000000i=i>>1//i的值不会变成0x40000000,而会变成0xc0000000就是说,符号位向右移动后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.