概述
给出一个16位的无符号整数。称这个二进制数的前8位为“高位”,后8位为“低位”。现在写一程序将它的高低位交换。例如,数34520用二进制表示为:
10000110 11011000
将它的高低位进行交换,我们得到了一个新的二进制数:
11011000 10000110
它即是十进制的55430。
这个问题用位操作解决起来非常方便,设x=34520=10000110 11011000(二进制) 由于x为无符号数,右移时会执行逻辑右移即高位补0,因此x右移8位将得到0000000010000110。
而x左移8位将得到11011000 00000000。可以发现只要将x>>8与x<<8这两个数相或就可以得到11011000 10000110。用代码实现非常简洁:
x = (x>>8)|(x<<8)
扩展到一搬情形:
设sizeof(int)=32;
无符号整型变量循环右移k次的结果为:
a0a1......a a31-k+1a31-k......a30a31a0.......a31-k
x = (x << 32-k) | (x >> k);
无符号整型变量循环左移k次的结果为:
x = (x >> 32-k) | (x << k);
转载于:https://www.cnblogs.com/happygirl-zjj/p/4599184.html
最后
以上就是怕孤单月光为你收集整理的位操作——高低位交换(循环左移/右移)的全部内容,希望文章能够帮你解决位操作——高低位交换(循环左移/右移)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复