python中的位运算
㈠ python之运算符汇总
1.算数运算符
假设 a= 10, b = 20
2.比较运算符
相关推荐:《Python视频教程》
3.赋值运算符
4.逻辑运算符
逻辑运算的顺序排列:从左往右开始执行
() > not > and > or
and or 一真一假
都为真: 取后面的 取前面的 取假的
都为假: 取前面的 去后面的 取真的
not True: False
not False: True
5.成员运算符
in -- 存在
not in -- 不存在
㈡ Day3_进制字符串位运算
计算机在存储数据时候都是以二进制的形式去存的
十进制、十六进制、八进制、二进制
基数:0,1,2,3,4,5,6,7,8,9
进位;锋十进一
每一位的值:123 = 1 100 + 2 10 + 3*1
基数:0,1
所有的二进制数都是由0和1组成
进位:逢二进一
每一位的值:11011 = 1 2^0+1 2 1+0*2 2+1 2^3+1 2^4 = 27
基数:0,1,2,3,4,5,6,7
进位:逢8进1
每一位的值:111 = 1 8^0+1 8 1+1*8 2 = 73
基数:0-9,a-f(A-F) a,b,c,d,e,f
进位:逢16进1
每一位的数:111 = 1 16^0+1 16 1+1*16 2 =273
5.进制之间的转换
python支持通过二进制、八进制、十进制和十六进制的形式来直接表示整数
oct(整数)--> 将括号中的整数,转换成八进制形式
hex(整数)--> 将括号中的整数,转换成十六进制形式
计算机在存数字的时候,存的是数字的二进制的补码
计算机内存的最小单位是位,1位只是存储两个状态
8位 = 1字节
十进制的10的原码就是:1010
最高位是符号位,如果正数符号位为0,负数符号位为1
10的原码 00000000 00001010
-10的原码 10000000 00001010
正数的反码是它的原码
负数的反码就是这个数的原码符号位不变的,然后其他位置上的数字取反
10 -> (原码)10000000 00001010 ——>(反码)11111111 11110101
正数的补码就是它的原码
负数的补码是它的反码加1
-10 -> (反码)11111111 11110101 -> (补码)11111111 11110110
总结:正的反码和补码都是原码;负数的补码是反码加1,反码就是原码符号位不变,其他位取反
为什么计算机存储数据的时候存补码?:因为计算机中只有加法器,只能进行加操作
存原码对负数进行加操作的时候有问题
计算机存数字存补码,计算的时候也是补码,最后结果看的时候看原码
位运算符:&(按位与),|(按位或), ^(异或), ~(取反),>>(右移), <<(左移)
数字1 & 数字2 :二进制的每一位,两个都为1结果才是1,否则为0
作用:让指定位上数置零,或者保留梦一位上的值
数字1 | 数字2:只要有一个为1,结果就是1;两个都为0,结果才是0
-3 | 2--> 11111101 | 00000010 == 11111111(补码) == 100000001(原码)
数字1 ^ 数字2:不同为1,相同为0
-3 ^ 2--> 11111101 ^ 00000010 == 11111111(补码) == 100000001(原码)
~数字: 将每一位取反
数字 << 位数 :将补码移动指定位数,后面用零补齐
左移特点 : 结果 == 数字 2^位数 m << n == m (2^n)
num * 2 == num << 1 num * 4 == num << 2
数字 >> 位数:将补码向右移动指定的位数,符号位不变,在符号位的后面补指定个数的0(正)或者1(负)
规律(只适用于正数): m >> n == m // (2^n)
python中通过单引号或者双引号引起来的字符集就是字符串
字符串中引号中的字符集,就是由各种不同的字符来组成
python中字符串中字符采用的是Unicode编码
Unicode编码,是通过两个字节来对一个字符进行编码。0 ~ 2^16-1
几乎包含了世界上所有字符
ASSCII编码:是通过一个字节对一个字符编码
Unicode编码包含ASSCII编码表
chr(数字):获取数字在Unicode编码表中对应的字符,返回的是只有一个字符的字符串
可以直接在字符串中写字符对应的编码值,格式:u十六进制编码
一些特殊功能或者具有特殊意义的字符,直接放在字符串的引号中无效,需要通过来转移
---> 换行
'--->'
---> 制表符(四个空格)
--->
"--->"
㈢ python中 b1=m|n^p是什么意思
这是位运算的结果吧。
虽然我对python中的位运算理解的不深刻,但这应该就是位运算并且赋值给b1.你可以查看与位运算相关的资料。
㈣ 转《python 位操作符 左移和右移 运算》
左移和右移N位等同于无溢出检查的2的N次幂运算:2**N
运算规则:
按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
语法格式:
需要移位的数字<<移位的位数
例如:3<<2则是将数字3左移动2位
计算过程:
3<<2首先把3转换为二进制数字
然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)
的连个空位补零。则得到的结果是,
则转换为十进制是12
运算规则:
按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位
即正数补0,负数补1
语法规则:
需要移位的数字>>移位的次数
例如:11>>2则是将数字11右移2位
计算过程:
11的二进制形式为:然后把低位的最
后两个数字移出,因为该数字是正数,所以在高位补0,则得到的最终的二进制结果为:
转换为十进制数为3
转自 https://blog.51cto.com/wangyan112/1320143 。
㈤ python中“>>=”和“<<=”符号是什么意思
>> 和 <<都是位运算,对二进制数进行移位操作。
<< 是左移,末位补0,类比十进制数在末尾添0相当于原数乘以10,x<<1是将x的二进制表示左移一位,相当于原数x乘2。比如整数4在二进制下是100,4<<1左移1位变成1000(二进制),结果是8。
>>是右移,右移1位相当于除以2。
而>>=和<<=,就是对变量进行位运算移位之后的结果再赋值给原来的变量,可以类比赋值运算符+=和-=可以理解。
比如x>>=2, 就是把变量x右移2位,再保留x操作后的值。
㈥ Python运算符优先级规则有哪些
以下运算符优先级顺序依次递增:
Lambda#运算优先级最低
逻辑运算符:or
逻辑运算符:and
逻辑运算符:not
成员测试:in,notin
同一性测试:is,isnot
比较:<,<=,>,>=,!=,==
按位或:|
按位异或:^
按位与:&
移位:<<,>>
加法与减法:+,-
乘法、除法与取余:*,/,%
正负号:+x,-x
㈦ python 位操作 取反问题
python 3的整型以16bit递增。
0xf0 =0b 0000 0000 1111 0000
~0xf0之后得到1111 11110000 1111
[1][111 11110000 1111]
确定是负数,有负数等于绝对值反码加一。求补码形式。
绝对值减1得:111 11110000 1110
反码得:000 0000 1111 0001
得-0xf1即-241(你那的~a[0]得-241)
要求得到[0,256),限定一下范围即可。
>>>(~a[0])&0xff
15
㈧ python中常用的运算符
python常见的运算符
1.算数运算符
算术运算符用于执行加减乘除、取余等基本数学运算,其中为了方便输入用斜杠"/"表示除号。和其它编程语言中两个整数相除结果为整数不同,Python中两个整数相除结果为小数,如果需要获取整除结果则需要使用两个斜杠"//"。Python中用两个“*”号表示求幂,例如 2**3=8,3**2=9。
①+ 名称:加
可用于对数字,序列等数据操作 。对于数字进行求和;其他的是连接
②- 名称 :减 只是求差
③* 名称:乘法
可用于数字、序列等数据进行操作;数字是求积;其他类型进行连续性的操作
④/ 名称:除法 求商
⑤% 名称:取余 求两个数字除法运算的余数
⑥** 名称:幂 求a的b次幂
⑦// 名称:地板除法 求商取整
2.关系运算符
关系运算符用于比较两个操作数之间的大小关系,返回值为True或False。
① == 名称:等于 ② != 不等于 ③ > 大于 ④ < 小于 ⑤ <= 小于等于 ⑥ >= 大于等于
注意:1. 一个=表示赋值,两个==表示判断两个对象是否相等
2.关系运算符可以连用
3.逻辑运算符
逻辑运算符用于判断多个条件是否满足某一要求。与其他编程语言不同的是:Python中用 not 表示逻辑非,and 表示逻辑与, or 表示逻辑或。
① and 名称:逻辑与 只有当and两边的之都为 True时,结果为True,否则结果均为False
② or 名称:逻辑或 只有当or两边的之都为False时,结果为False,否则结果均为True
③not 名称:逻辑非 结果与原来的结果相反,总是。
注意:逻辑与和了逻辑或在进行求解期间 ,总是从左到右一次执行 ,如果在某一步可以确定结果,那么将不在执行后面的表达式。
4.赋值运算符
运算符 += -= *= /= %= **= //= &= |= ^= <<= >>=
名称 加赋值 减赋值 乘赋值 除赋值 取余赋值 幂赋值 地板除法赋值 位与赋值 位或赋值 位异或赋值 左移赋值 右移赋值
例子 a +=b a -= b a *= b a /= b a %= b a **= b a //= b a &= b a |= b a ^= b a <<= b a >>= b
说明 a = a + b a = a - b a = a * b a = a / b a = a % b a = a ** b a = a // b a = a & b a =a | b a = a ^ b a = a << b a = a >> b
5.身份运算符
in 例子:x in y 表示y中是否含有x,如果有则返回True,没有责则返回False
not in 例子: x not in y 表示y中是否含有,没有返回位True,有返回False
㈨ 我想问下python中 逻辑与:“&”和“and”的区别
1、“&”和“and”有本质区别,属于不同类型的运行符号。& 是位运算;and 是逻辑运算。
2、首先是&:该运输符属于字符串的连接运算符,例如,“w“&”c“结果为字符串”wc“。
3、and属于逻辑运算符,表示逻辑与运算,其规则是有假取假,全真为真。例如,true and false结果为false,true and true结果为true。
(9)python中的位运算扩展阅读
Python的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。
在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法。
由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this可以获得完整的列表。
Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。所以很多人认为Python很慢。
不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python设计师倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。可用的JIT技术是PyPy。
Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。
Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。
虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。
Python的支持者较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shellscript、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。
Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。
因此,很多人还把Python作为一种“胶水语言”(glue language)使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如Google Engine使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模块。
《Python技术手册》的作者马特利(Alex Martelli)说:“这很难讲,不过,2004 年,Python 已在Google内部使用,Google 召募许多 Python 高手,但在这之前就已决定使用Python,
他们的目的是 Python where we can, C++ where we must,在操控硬件的场合使用 C++,在快速开发时候使用 Python。”