欢迎来到天天文库
浏览记录
ID:8976054
大小:14.72 KB
页数:3页
时间:2018-04-13
《c语言中循环移位的操作符》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、C语言中没有提供循环移位的操作符,但可以通过简洁的方式实现循环移位设一个操作数x有s位则循环左移n位的操作为:(x<2、(x>>(s-n));同理右移n位位:(x>>n)3、(x<<(s-n));实际编程中可以用宏定义实现循环移位:#defineROTATE_LEFT(x,s,n)((x)<<(n))4、((x)>>((s)-(n)))#defineROTATE_RIGHT(x,s,n)((x)>>(n))5、((x)<<((s)-(n)))例如:#include#defineROTATE_LEFT(x,s6、,n)((x)<<(n))7、((x)>>((s)-(n)))#defineROTATE_RIGHT(x,s,n)((x)>>(n))8、((x)<<((s)-(n)))intmain(){unsignedinta;scanf("%x",&a);printf("%08x",a);printf("%08x",ROTATE_LEFT(a,8*sizeof(int),4));printf("%08x",ROTATE_RIGHT(a,8*sizeof(int),8));return0;}运行结果:12345678//原数29、3456781//移1位后具体样例:设有数据 a=01111011,循环左移2位正确结果:11101101 分步实现:b=a>>(8-2);//用来得到正常左移丢失的位和循环移位后其正确位置b="00000001";a="a"<<2;//左移a="11101100"a=a10、b;//a=11101101 如果不是用中间变量一步实现:a=(a>>(8-2))11、(a<<2); 总长度N(81632) 循环左移n(a>>(N-n))12、(a>>n) 循环右移n(a<<(N-n))13、(a>>n) C语言的位运算功能是其区别于其他大多14、数高级程序设计语言的特色之一,用它可以方便实现一些特殊功能,灵活掌握是用C程序编写系统程序的基础。其他对位进行操作的还有位域法;几个对位操作的样例如下:#defineSETBIT(REG,N)REG15、=(1<
2、(x>>(s-n));同理右移n位位:(x>>n)
3、(x<<(s-n));实际编程中可以用宏定义实现循环移位:#defineROTATE_LEFT(x,s,n)((x)<<(n))
4、((x)>>((s)-(n)))#defineROTATE_RIGHT(x,s,n)((x)>>(n))
5、((x)<<((s)-(n)))例如:#include#defineROTATE_LEFT(x,s
6、,n)((x)<<(n))
7、((x)>>((s)-(n)))#defineROTATE_RIGHT(x,s,n)((x)>>(n))
8、((x)<<((s)-(n)))intmain(){unsignedinta;scanf("%x",&a);printf("%08x",a);printf("%08x",ROTATE_LEFT(a,8*sizeof(int),4));printf("%08x",ROTATE_RIGHT(a,8*sizeof(int),8));return0;}运行结果:12345678//原数2
9、3456781//移1位后具体样例:设有数据 a=01111011,循环左移2位正确结果:11101101 分步实现:b=a>>(8-2);//用来得到正常左移丢失的位和循环移位后其正确位置b="00000001";a="a"<<2;//左移a="11101100"a=a
10、b;//a=11101101 如果不是用中间变量一步实现:a=(a>>(8-2))
11、(a<<2); 总长度N(81632) 循环左移n(a>>(N-n))
12、(a>>n) 循环右移n(a<<(N-n))
13、(a>>n) C语言的位运算功能是其区别于其他大多
14、数高级程序设计语言的特色之一,用它可以方便实现一些特殊功能,灵活掌握是用C程序编写系统程序的基础。其他对位进行操作的还有位域法;几个对位操作的样例如下:#defineSETBIT(REG,N)REG
15、=(1<
此文档下载收益归作者所有