我是靠谱客的博主 怕孤单月光,最近开发中收集的这篇文章主要介绍位操作——高低位交换(循环左移/右移),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

给出一个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

最后

以上就是怕孤单月光为你收集整理的位操作——高低位交换(循环左移/右移)的全部内容,希望文章能够帮你解决位操作——高低位交换(循环左移/右移)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部