循环左移时,用从左边移出的位填充字的右端,而循环右移时,用从右边移出的位填充字的左侧。这种情况在系统程序中时有使用,在一些控制程序中用得也不少。设有数据说明:
a=01111011,循环左移2位正确结果:11101101
过程:
b=a>>(8-2)用来得到正常左移丢失的位和循环移位后其正确位置b=00000001
a=a<<2左移a=11101100
a=a|ba=11101101
如果不是用中间变量a=(a>>(8-2))|(a<<2)
总长度N(81632)
循环左移n:(a>>(N-n))|(a>>n)
循环右移n:(a<<(N-n))|(a>>n)
C语言的位运算功能是其区别于其他大多数高级程序设计语言的特色之一,用它可以方便实现一些特殊功能,灵活掌握是用C程序编写系统程序的基础。
扩展资料:
C语言高效编程技巧:
一:以空间换时间
计算机程序中最大的矛盾是正冲空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题
二:数学方法解决问题
数学是计算旁清核机之母,没有数学的依据和基础,就没有计算机发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高。
三:使用位 *** 作
实现高效的C语言编写的第三招----使用位 *** 作,减少除法和取模的运算。
在计算机程序中,数据的位是可以 *** 作的最小数据单位,理论上可以用“位运算”来完成所有的运算和 *** 作。一般的位 *** 作是用来控制硬件的,或者做数运掘据变换使用,但是,灵活的位 *** 作可以有效提高程序运行的效率。
参考资料来源:百度百科-c语言程序设计
#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")
}
# include"stdio.h"
void main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10},b[10]
int i,j,k
printf("移悄枯位前: ")
for(k=0k<10k++)
printf("%d ",a[k])
printf("\n")
printf("Input i: ")
scanf("%d",&启腔洞i)
j=i%10
for(k=0k<10k++)
{
if(j==10)
j=0
b[k]=a[j++]
}
for(k=0k<10k++)
a[k]=b[k]
printf("移位后圆拍: ")
for(k=0k<10k++)
printf("%d ",a[k])
printf("\n")
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)