python 整数逆位运算_Python 进制转换、位运算

一、进制转换

编程用十进制,十进制转换为二进制、八进制、十六进制

In [135]: bin(23)

Out[135]: '0b10111'

In [136]: oct(23)

Out[136]: '0o27'

In [137]: hex(23)

Out[137]: '0x17'

也可以直接反向获取十进制

In [146]: 0b10111

Out[146]: 23

In [147]: 0o27

Out[147]: 23

In [148]: 0x17

Out[148]: 23

也可以用int函数来转换

In [149]: int('0b10111', 2)

Out[149]: 23

In [150]: int('0o27', 8)

Out[150]: 23

In [151]: int('0x17', 16)

Out[151]: 23

二、位运算

按位异或的3个特点:

(1) 0^0=0,0^1=1  0异或任何数=任何数

(2) 1^0=1,1^1=0  1异或任何数-任何数取反

(3) 任何数异或自己=把自己置0

按位异或的几个常见用途:

(1) 使某些特定的位翻转

例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。

10100001^00000110 = 10100111

(2) 实现两个值的交换,而不必使用临时变量

例如交换两个整数a=10100001,b=00000110的值,可通过下列语句实现:

a = a^b;   //a=10100111

b = b^a;   //b=10100001

a = a^b;   //a=00000110

& 按位与

| 按位或

^ 按位异或

~ 按位取反

<< 按位左移

>> 按位右移

用途: 直接操作二进制,省内存,效率高

1)<

各二进位全部左移n位,高位丢弃,低位补0

x << n 左移 x 的所有二进制位向左移动n位,移出位删掉,移进的位补零

【注意事项】

a. 左移1位相当于乘以2

用途:快速计算一个数乘以2的n次方 (8<<3 等同于8*2^3)

b.左移可能会改变一个数的正负性

2)>>右移

各二进位全部右移n位,保持符号位不变

x >> n, x的所有二进制位向右移动n位,移出的位删掉,移进的位补符号位, 右移不会改变一个数的符号

【注意事项】

右移1位相当于除以2

x 右移 n 位就相当于除以2的n次方

用途:快速计算一个数除以2的n次方 (8>>3 等同于8/2^3)

3)& 按位与

全1才1否则0 :只有对应的两个二进位均为1时,结果位才为1,否则为0

4) | 按位或

有1就1 只要对应的二个二进位有一个为1时,结果位就为1,否则为0

5) ^ 按位异或

不同为1 当对应的二进位相异(不相同)时,结果为1,否则为0

6) ~ 取反

~9 = -10

【为什么9取反变成了-10的说明】:

9的原码 ==> 0000 1001 因为正数的原码=反码=补码,所以在 真正存储的时候就是0000 1001

接下来进行对9的补码进行取反操作

进行取反==> 1111 0110 这就是对9 进行了取反之后的补码

既然已经知道了补码,那么接下来只要转换为 咱们人能识别的码型就可以,因此按照规则 ,把这个1111 0110 这个补码 转换为原码即可

符号位不变,其它位取反==> 1000 1001

三、例题

1. 输入一个正数,输出该数二进制表示中1的个数

知识点:把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。那么一个整数的二进制表示中有多少个1,就可以进行多少次这样的操作。

总结:把一个整数减去1之后再和原来的整数做位与运算,得到的结果相当于是把整数的二进制表示中的最右边一个1变成0 。

代码如下:

def count(n):

num = 0

while n:

n &= (n-1)

num += 1

return num

2. 输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n

解决方法:第一步,求这两个数的与或;第二步,统计异或结果中1的位数。

代码如下:

def mton(m,n):

yihuo = m^n

count = 0

while yihuo:

yihuo &= (yihuo-1)

count += 1

print(count)

3. 用一条语句判断一个整数是不是2的整数次方

解决方法:一个整数如果是2的整数次方,那么它的二进制表示中有且只有一位是1,而其它所有位都是0 。根据前面的分析,把这个整数减去1后再和它自己做与运算,这个整数中唯一的1就变成0了。

代码如下:

def judgebinary(x):

if x&(x-1) == 0:

return True

return False

4.不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和

示例:

示例 1:

输入: a = 1, b = 2

输出: 3

示例 2:

输入: a = -2, b = 3

输出: 1

代码如下:

def getSum(a, b):

"""

:type a: int

:type b: int

:rtype: int

"""

#位操作

no_carry_sum=a^b #a与b不进位时的和,恰好与异或性质一样

print(no_carry_sum)

carry=(a&b)<<1 #a与b的和的进位,恰好是与或操作再左移一位

print(carry)

return sum([no_carry_sum,carry])#前两者之和

res = getSum(12,3)

print(res)

总结:两个数的和可以通过将这两个数异或得到这个数不进位时的和,再将这两个数进行与或再左移一位,相当于进位的操作,再将这两个数相加,就可以得到两个数的和

5.判断数字n的二进制数从右往左数第i位是否为1

思路:1<

用n与有特定位的指示数与或,就能判断n的特定位是否为1,【长数和短数与或只比较到短数的长度】

举例:10的二进制数倒数第2位是否为1, 10--1010, 1<<1=2--10, 1010&10 = True

代码如下:

def isOne(n,i):

print(n,1<

return (n&(1<

res = isOne(10,1)

print(res) #True

参考文献:

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

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

相关文章

python高频词_python几万条微博高频词分析

python几万条微博高频词分析看到别人有做影视热评的分析统计&#xff0c;觉得挺好玩的&#xff0c;就来试试看看效果Screenshot_2018-05-21-11-00-42-879_com.master.wei.png思路抓取想要的微博数据写入数据库分词统计出词汇出现次数过滤无意义的干扰词存入数据库写接口&#x…

属性值动态调整_【VBA】Range对象的常用方法属性(三)

本文继续上一节的Range对象的方法和属性的讲解。上一讲讲到了End属性寻找最后一个已经使用的单元格。这一节继续讲解关于动态找单元格区域方面的属性。Offset 偏移相信学过OFFSET工作表函数的人对这个印象比较深刻&#xff0c;它可是函数中高手必备函数之一。在VBA中&#xff0…

git 新建分支并切换到该分支_git切换到指定分支,git新建分支与合并

一&#xff0c;git切换到指定分支使用git进行开发的时候经常会遇到需要切换远程分支并且提交到远程指定分支的情况&#xff0c;操作如下1&#xff0c;查看远程所有分支git branch -agit branch不带参数,列出本地已经存在的分支&#xff0c;并且在当前分支的前面用*标记&#xf…

mysql入门到跑路_Mysql入门二十小题(DBA老司机带你删库到跑路)2018.11.26

1、 请介绍数据库管理系统的种类及代表产品RDBMS: mysql oracle mssqlNoSQL: redis mongoab memcache2、 请简述数据库管理系统的作用数据存储,管理数据,备份恢复,安全性,权限管理,3、 请简述RDBMS和NoSQL的特性对比RDBMS&#xff1a;强大的查询功能、强一致性、二级索引、支…

mysql用户如何迁移_迁移MySQL用户及权限

导出[rootdb01 tmp]# mysql -B -N -uroot -p -e "SELECT CONCAT(\, user,\\, host, \) FROM user WHERE user ! debian-sys-maint AND user ! root AND user ! " mysql > /tmp/mysql_all_users.txt[rootdb01 tmp]# cat /tmp/mysql_all_users.txt[rootdb01 tmp]# c…

mysql安装包没有安装程序_MySQL5.6的zip包安装教程详解

之前我们都是后缀为.msi的文件&#xff0c;换言之就是傻瓜式安装&#xff0c;但是有些版本不容易控制安装路径&#xff0c;或者数据库编码格式&#xff0c;还有些会安装很多无用的服务&#xff0c;但是都没有后缀为.zip文件简单直接&#xff0c;说是在哪里&#xff0c;就在哪里…

mysql not in 多列,MySQL中的多列外键?

I have a table that has a primary key consisting of two columns (product_id, attribute_id). I have another table that needs to reference this table. How can I make a foreign key in the other table to link it to a row in the table with two primary keys?解决…

导入mysql source_mysql导入source数据库

首先要确保数据库存在&#xff0c;如果不存在则创建方法1 source很智能&#xff0c;很方便&#xff0c;很快捷。# mysql -uroot -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 54467Server version: 5.6.36-log Sour…

mysql count优化_MySQL count()函数及其优化

很简单&#xff0c;就是为了统计记录数由SELECT返回为了理解这个函数&#xff0c;让我们祭出 employee_tbl 表所有记录统计行的总数计算 Zara 的记录数注意&#xff1a;由于 SQL 查询对大小写不敏感&#xff0c;所以在 WHERE 条件中&#xff0c;无论是写成 ZARA 还是 Zara&…

dz论坛连接mysql数据库_dz论坛搬家后连接数据库等教程

dz搬家后&#xff0c;第一步就是上传源文件到网站根目录和导入数据库然后修改对应的数据库连接配置文件 一共有三个这样修改之后网站就可以访问啦1、config/config_global.php$_config[db][1][dbuser] 数据库用户名;$_config[db][1][dbpw] 数据库密码;$_config[db][1][dbname…

mysql创建表时默认默认_mysql创建数据表时指定默认值教程

指定默认值如果在插入行时没有给出值&#xff0c;MySQL允许指定此时使用的默认值。默认值用 CREATE TABLE 语句的列定义中的 DEFAULT 关键字指定。请看下面的例子&#xff1a;输入&#xff1a;create table orderitems(order_num int NOT NULL,order_item int NOT NULL,prod_id…

csv mysql 导入 mac_将sqlserver导出的csv数据导入到ubuntu和mac上的mysql

最近在捣鼓一些数据相关的东西。将sql server里的数据导入到ubuntu和mac上的mysql&#xff0c;方法有很多。不过我选择了最简单的一种&#xff1a;将sql server的数据导成csv&#xff0c;然后将csv导入到mysql。想法挺好&#xff0c;坑挺多。sql server是windows的&#xff0c;…

2012 安装mysql 5.6_如何安装mysql server 5.6

匿名用户1级2016-02-22 回答有两种方法&#xff0c;一种方法使用mysql的check table和repair table 的sql语句&#xff0c;另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。1. check table 和 repair table登陆mysql 终端…

php mysql循环语句怎么写_mysql数据库循环语句该怎么写???

数据库结构num date2 2013-07-245 2013-07-258 2013-08-0310 2013-08-224 2013-09-10最后要在页面中输出为一个行行统计格式7月份 7条记录8月份 18条记录9月份 4条记录要求sql语句只有一句话&#xff0c;有的人会想可以select (count(条件))关键是还要换行的。。有点不会了。回…

mac mysql 安装 简书_在Mac系统上配置MySQL以及Squel Pro

为了响应nodejs的大红大紫&#xff0c;最近应用其实现了一些server端的功能。数据库方面选择了老少咸宜的MySQL。今后肯定还会有相关应用需求。特此记录Mac系统下如何安装、配置MySQL及其管理工具Squel Pro。为什么选择MYSQL&#xff1a;数据库有很多&#xff0c;为什么么我选择…

ntext在mysql_varchar和text说不清的那些事

数据库定义到char类型的字段时&#xff0c;不知道大家是否会犹豫一下&#xff0c;到底选char、nchar、varchar、nvarchar、text、ntext中哪一种呢&#xff1f;结果很可能是两种&#xff0c;一种是节俭人士的选择&#xff1a;最好是用定长的&#xff0c;感觉比变长能省些空间&am…

win+mysql自动备份吗_Windows下mysql自动备份的最佳方案

网上有很多关于window下Mysql自动备份的方法&#xff0c;其实不乏一些不好的地方和问题&#xff0c;现总结出一个最好的方法供大家参考&#xff1a;新建一个记事本&#xff0c;然后重命名为&#xff1a; mysql_backup.bat 然后单击右键选择编辑&#xff0c;把下面的部分粘贴进来…

字符串转16进制_16、atoi-整数字符串转整数-leetcode8-中等

思路&#xff1a;借助正则表达式。class Solution:def myAtoi(self, s: str) -> int:import repattern re.compile(r^[-]?d) # 生成patterns s.lstrip() #去除左侧空格num_str pattern.findall(s) #找到pattern&#xff0c;返回一个listnum int(*num_str) #用*将list解…

python递归查找_[Python]递归查找文件(最简洁)

google了一下发现大多数人都是自己实现的&#xff0c;其实python标准库里是有相关方法的&#xff0c;更简洁&#xff0c;而且支持pattern匹配。其实自己实现也没多难&#xff0c;但是一个非常重要的经验告诉我&#xff0c;内置方法哪怕代码跟你的一模一样都会比你自己写的快很多…

vue移动端通过px动态计算图片宽高_vue图片宽高自适应_移动web图片高度自适应的解决方案...

由于图片的加载是在dom加载完成之后进行的&#xff0c;于是&#xff0c;在手机端浏览网页时&#xff0c;经常会看到页面刚打开时很多内容叠在一起&#xff0c;当图片加载完成后&#xff0c;页面会由于图片加载完成出现明显的抖动针对这个问题&#xff0c;有以下几种解决方案媒体…