二进制逆序

要求计算二进制(16位)的逆序,如数12345用二进制表示为:

      00110000 00111001

将它逆序,我们得到了一个新的二进制数:

      10011100 00001100

最容易想到的方法就是依次交换两端的数据,从右向左遍历数字,当i位遇到1时,将逆序数字对应的(17-i)位设为1。

def reverseBinary(num):print bin(num)new=0tmp=(1<<15)for i in xrange(16):if num&1:new|=tmptmp>>=1num>>=1return newif __name__=='__main__':print bin(reverseBinary(12345))>>> 
0b0011000000111001
0b1001110000001100

还有一种高低位互换类似于合并排序的解法。

设想一下,逆序'ab',为'ba'。

逆序abcd,可以先两两交换为cdab,然后一一交换为dcba。

逆序abcdefgh,先四四交换efghabcd,然后两两交换fehgcdab,然后一一交换efghdcaba。

那么可以推广到二进制表示:

第一步:每2位为一组,组内高低位交换

       00 11 00 00 00 11 10 01

  -->00 11 00 00 00 11 01 10

第二步:每4位为一组,组内高低位交换

       0011 0000  0011 0110

  -->1100 0000 1100 1001

第三步:每8位为一组,组内高低位交换

       11000000 11001001

  -->00001100 10011100

第四步:每16位为一组,组内高低位交换

       0000110010011100

  -->1001110000001100

高低位互换时操作大概就是偶数位左移1位,奇数位右移1位

      原 数   00110000 00111001

      奇数位 0_1_0_0_ 0_1_1_0_

      偶数位 _0_1_0_0 _0_1_0_1

其余位数用0填充,然后将奇数位右移一位,偶数位左移一位,此时将这两个数据做按位与运算,即可以达到奇偶位上数据交换的效果了:

def reverseBinary(a):a = ((a & 0xAAAA) >> 1) | ((a & 0x5555) << 1)a = ((a & 0xCCCC) >> 2) | ((a & 0x3333) << 2) a = ((a & 0xF0F0) >> 4) | ((a & 0x0F0F) << 4) a = ((a & 0xFF00) >> 8) | ((a & 0x00FF) << 8)return a
if __name__=='__main__':print bin(reverseBinary(12345))

  

转载于:https://www.cnblogs.com/linxiyue/p/3916152.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sublime text3安装插件 emmet

转载自&#xff1a;http://9iphp.com/web/html/1260.html Sublime Text常用插件总结及Package Control安装方法 2015/01/09 | HTML/CSS,Linux | 8 条评论 | (2评) | 评分 Sublime Text 是一个代码编辑器&#xff0c;具有漂亮的用户界面和强大的功能&#xff0c;并且它还是…

指令与条件码

一.ALU:算数逻辑单元 ALU从寄存器中读取数据后&#xff0c;执行相应的运算&#xff0c;在返回目的寄存器rdx中&#xff0e;简单示例如下图 当然ALU除了执行算术和逻辑运算指令以外&#xff0c;还会根据运算结果去设置条件码寄存器&#xff0e; 二.条件码寄存器: 长度为单个比…

解析1G到5G技术与设备发展历程

来源&#xff1a;5G作者&#xff1a;张国宝&#xff1a;国家发改委原副主任、国家能源局原局长摘要&#xff1a;解析1G到5G技术与设备发展历程未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工…

NHibernate常见错误

Oracle 下必须用 Sequence [PrimaryKey(PrimaryKeyType.Sequence,"ID")] 1、提示 ORA-02289: 序列不存在 -- Create sequence create sequence XXXminvalue 1maxvalue 999999999999999999999999999start with 1increment by 1cache 20; 在数据库建个同名字段 测试不通…

sublime text插件emmet的用法教程

转载自&#xff1a;http://blog.wpjam.com/m/emmet-grammar/ 使用 Emmet 生成 HTML 的语法详解 现在&#xff0c;打开你的 ST2 然后新建一个 HTML 文档&#xff0c;跟着文章&#xff0c;即时输入对应的指令然后亲自尝试一下&#xff01; 生成 HTML 文档初始结构 HTML 文档的初始…

CES 2019开胃菜竟然是芯片,英特尔 英伟达 高通 华为 AMD已经开打!

来源&#xff1a;网易智能1月8日消息&#xff0c;一年一度的CES即将在美国拉斯维加斯开幕&#xff0c;开幕前夕&#xff0c;各家厂商纷纷推出新品&#xff0c;其中最突出的&#xff0c;便是几家半导体厂商推出的最新款芯片&#xff0c;让CES 2019一开始就变得纷繁热闹。下面&am…

springmvc resources 配置

http://www.mkyong.com/spring-mvc/spring-mvc-how-to-include-js-or-css-files-in-a-jsp-page/ 如果<mvc:resources mapping"/resources/**" location"/resources/mytheme/" />注意location是Webroot目录下面的文件夹则<link href"${pageCo…

dos部分命令

都是转载的别的网址的&#xff0c; 部分如下&#xff1a; 删除 test 这个目录下的所有目录和档案 rmdir /s/q test http://blog.csdn.net/kofterry/article/details/5183110

一文概述 2018 年深度学习 NLP 十大创新思路

来源&#xff1a;AI科技评论摘要&#xff1a;Sebastian Ruder 是一位 NLP 方向的博士生、研究科学家&#xff0c;最近&#xff0c;他基于十几篇经典论文盘点了 2018 年 NLP 领域十个令人激动并具有影响力的想法&#xff0c;并将文章发布在 Facebook 上。今年&#xff0c;我发现…

Django 数据库

做过交互性网站的朋友&#xff0c; 应该知道数据库是网络应用不可或缺的模块。 Django也不例外&#xff0c; 它有强大的数据库接口。 下面我们以MySql为例&#xff0c; 建立数据库系统和Django的连接。 Get the Database Driver我们可以在 https://pypi.python.org 网站&#…

sublime text安装插件出现问题

出现这个问题的时候&#xff0c; 参考&#xff1a;http://blog.csdn.net/zhyh1986/article/details/40678263

斯坦福重磅报告:2030年的人工智能与生活

来源&#xff1a;元浦说文摘要&#xff1a;本文节选自斯坦福大学「人工智能百年研究」的首份报告&#xff1a;《2030 年的人工智能与生活》&#xff0c;这篇报告是计划持续至少 100 年的研究系列中的第一篇。该报告描述了目前人工智能相关技术、法律以及道德上的挑战&#xff0…

redis清空缓存

flushall转载于:https://www.cnblogs.com/xiabaizhu/p/3924957.html

有25匹马,5条赛道

昨天参加暴风影音的校招笔试&#xff0c;选择题和编程题选择题中的一道题是这样的&#xff1a;有25匹马&#xff0c;5条赛道&#xff0c;一匹马一条赛道&#xff0c;无法为每匹马计时&#xff0c;每一场比赛只能知道5匹马的相对快慢&#xff0c;求决胜出前5名至少需要多少场比赛…

万物智联时代——2018年AIOT产业蓝皮书正式发布

来源&#xff1a;物联网资本论摘要&#xff1a;纵观2018年AIOT行业&#xff0c;可以说大事不断&#xff0c;阿里巴巴正式宣布将全面进军物联网&#xff0c;“中兴事件”持续发酵也使得半导体行业受到广泛关注&#xff0c;NB-IoT模组价格进一步下调补贴后已进入20元大关等等。作…

判断栈的弹出序列

题目描述输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否为该栈的弹出顺序。 假设压入栈的所有数字均不相等。 例如序列1,2,3,4,5是某栈的压入顺序&#xff0c; 序列4&#xff0c;5,3,2,1是该压栈序列对应的一个弹出序列&#xff0c;…

2018微信年度数据报告:00后最爱表情捂脸哭 80后呲牙笑

来源 &#xff1a;腾讯科技摘要&#xff1a;腾讯科技讯 1月9日消息&#xff0c;在今日举行的2019微信公开课PRO上&#xff0c;微信发布了《2018微信年度数据报告》。报告显示&#xff0c;2018年&#xff0c;微信每个月有10.82亿用户保持活跃&#xff0c;每天有450亿次信息发送出…

第二章 二进制数值和记数系统

1 什么是数字 数字是属于抽象数学系统的一个单位&#xff0c;服从特定的顺序法则、加法法则和乘法法则。 2 位置记数法 数字是用位置记数法编写的。最右边的数位表示它的值乘以基数的0次幂&#xff0c;紧挨着这个数的左边的数位表示它的值乘以基数的1次幂&#xff0c;依此类推。…

行业变革的镜子:2018年融资最多的24家美国创业公司

来源&#xff1a;资本实验室据Crunchbase统计&#xff0c;2018年融资最多的24家美国创业公司融资总额达到103.66亿美元&#xff0c;累计融资超过232亿美元。这24家公司为我们提供了非常丰富的数据和视角&#xff0c;让我们得以观察到新技术与新商业模式对传统行业的颠覆正在加速…

Win32中如何判断多个键同时按下

可以使用下面的两个Win32函数 GetKeyState The GetKeyState function retrieves the status of the specified virtual key. The status specifies whether the key is up, down, or toggled (on, off—alternating each time the key is pressed). SHORT GetKeyState(int nVi…