c语言循环移位
#include<stdio.h>
#include<math.h>
unsignedfun(unsignednum,intn)
{
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));
}
}
voidmain(void)
{
printf("%u ",fun(2,-34));
}
② C语言中的循环移位计算
因为是按8进制输入的,8进制的24换成10进制就是20,换成2进制就是00010100(以1字节表示)。而00010100循环右移2位后就是00000101,即10进制孝棚冲的5,而5按8进制输出(输出和腔格式为%o),就是5。
00010100循环左移2位后是01010000,用10进制表示就是80,而80按8进制输出(输巧歼出格式为%o),就是120。
③ 如何用c语言实现循环左移
循环左移时,用从左边移出的位填充字的右端,而循环右移时,用从右边移出的位填充字的左侧。这种情况在系统程序中时有使用,在一些控制程序中用得也不少。设有数据说明:
a=01111011,循环左移2位 正确结果: 11101101
过程:
b=a>>(8-2) 用来得到正常左移丢失的位和循环移位后其正确位置 b=00000001;
a=a<<2;左移 a=11101100
a=a|b; a=11101101
如果不是用中间变量 a=(a>>(8-2))|(a<<2)
总长度N(8 16 32)
循环左移n: (a>>(N-n))|(a>>n)
循环右移n: (a<<(N-n))|(a>>n)
C语言的位运算功能是其区别于其他大多数高级程序设计语言的特色之一,用它可以方便实现一些特殊功能,灵活掌握是用C程序编写系统程序的基础。
(3)c语言循环移位扩展阅读:
C语言高效编程技巧:
一:以空间换时间
计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题
二:数学方法解决问题
数学是计算机之母,没有数学的依据和基础,就没有计算机发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高。
三:使用位操作
实现高效的C语言编写的第三招----使用位操作,减少除法和取模的运算。
在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效提高程序运行的效率。
④ C语言问题,有关负数的循环移位
#include<stdio.h>
int main()
{int x=-1024,n=4,i;
printf("x=%d ",x);
for(i=31;i>-1;i--)
{printf("%d",(x>>i)&1);
if(i%4==0)printf(" ");
}
for(i=1;i<=n;i++)
x=((x&0x8000000)!=0)|(x<<1);
printf(" 循环左移%d位以后,x=%d ",n,x);
for(i=31;i>-1;i--)
{printf("%d",(x>>i)&1);
if(i%4==0)printf(" ");
}
return 0;
}