博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
位操作——高低位交换(循环左移/右移)
阅读量:5243 次
发布时间:2019-06-14

本文共 579 字,大约阅读时间需要 1 分钟。

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

你可能感兴趣的文章
SuperEPC
查看>>
RBAC用户角色权限设计方案
查看>>
repeater做删除前弹窗询问
查看>>
thymeleaf
查看>>
CentOS7安装iptables防火墙
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
python针对excel的读写操作-----openpyxl
查看>>
最后几本书,不珍藏了。
查看>>
Js时间处理
查看>>
Java项目xml相关配置
查看>>
按钮实现A标签新窗口打开(不用window.open)
查看>>
Array对象
查看>>
MainActivity
查看>>
三维变换概述
查看>>
android 数字键盘制作
查看>>
Cpp: object lifetime
查看>>
[8.08考试] 隔膜
查看>>
Board Game CodeForces - 605D (BFS)
查看>>