扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
#include stdio.h
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名申请、虚拟空间、营销软件、网站建设、施秉网站维护、网站推广。
#include math.h
unsigned fun(unsigned num, int n)
{
if(n 0)
{
//sizeof(unsigned)*8计算变量所占位数,如int型占32位
return (num (sizeof(unsigned)*8 - n)) | (num n); //先高位移动,再低位移动后,两者按位或,相当把低位溢出的又添加到了高位,实现了循环的效果
}
else
{
return (num (sizeof(unsigned)*8 - abs(n))) | (num abs(n));
}
}
void main(void)
{
printf("%u\n", fun(2, -34));
}
#includestdio.h
#define N 10
void fun(int *a,int n,int x) { int i,j,k;
for ( i=0;ix;i++ ) { k=a[0]; for ( j=0;jn-1;j++ ) a[j]=a[j+1]; a[n-1]=k; }
}
void main() { int a[N],i,x;
printf("Enter %d integers: ",N); for ( i=0;iN;i++ ) scanf("%d",a[i]);
printf("Enter x: "); scanf("%d",x);
fun(a,N,x);
printf("After Circle left shift %d bit: ",x); for ( i=0;iN;i++ ) printf("%d ",a[i]);
printf("\n");
}
以无符号整型为例:
unsigned int func(unsigned int n)
{
unsigned int v=n(1(sizeof(unsigned int)-1));
n=1;
if(v) n|=1;
return n;
}
循环左移时,用从左边移出的位填充字的右端,而循环右移时,用从右边移出的位填充字的左侧。这种情况在系统程序中时有使用,在一些控制程序中用得也不少。设有数据说明:
a=01111011,循环左移2位 正确结果: 11101101
过程:
b=a(8-2) 用来得到正常左移丢失的位和循环移位后其正确位置 b=00000001;
a=a2;左移 a=11101100
a=a|b; a=11101101
如果不是用中间变量 a=(a(8-2))|(a2)
总长度N(8 16 32)
循环左移n: (a(N-n))|(an)
循环右移n: (a(N-n))|(an)
C语言的位运算功能是其区别于其他大多数高级程序设计语言的特色之一,用它可以方便实现一些特殊功能,灵活掌握是用C程序编写系统程序的基础。
扩展资料:
C语言高效编程技巧:
一:以空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题
二:数学方法解决问题
数学是计算机之母,没有数学的依据和基础,就没有计算机发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高。
三:使用位操作
实现高效的C语言编写的第三招----使用位操作,减少除法和取模的运算。
在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效提高程序运行的效率。
参考资料来源:百度百科-c语言程序设计
循环移位就是把数值变成二进制,然后循环移动的过程。
换句话说,循环移位就是将移出的低位放到该数的高位(循环右移)或把移出的高位放到该数的低位(循环左移),左移,和右移动都是对整数进行的操作,在Win32控制台应用程序中,整形占4Byte节32bit。
循环左移的过程可以分为3步:
1、将x左端的n位先移动到y的低n位中,x(32-n);
2、将x左移n位,其右面低位补0,xn;
3、进行按位或运算(x (32 - n) | (x n));
循环右移的过程可以分为3步:
1、将x的左端的低n位先移动到y的高n位中x(32-n)
2、将x右移n位,其左面高n位补0xn;
3、进行按位或操作(x (32 - n) | (x n));
扩展资料
C语言实现循环移位:循环移位是对二进制序列进行操作,所以实现循环移位先需要将需要移位的数转换为二进制序列,然后按照上面描述的步骤进行移位,最后将移位后的二进制序列打印出来。
所谓循环移位是指在移位时不丢失移位前原范围的位,而是将它们作为另一端的补入位。例如循环右移n位,指各位右移n位,原来的低n位变成高n位,指各位右移n位,原来的低n位变成高n位。
用到循环移位的操作时,在汇编里面是比较容易实现的,ror,rol指令就行了。利用位运算进行循环移位操作比较容易理解。如果不是循环移位,使用xn(左移n位),xn右移n位。
参考资料来源:百度百科—循环移位运算
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流