位运算/运算符优先级


一、位运算

位运算

描述

示例

&

按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0

(a & b)输出结果12,二进制解释:0000 1100

|

按位或运算符:只要对应的两个二进制位1时,结果位就为1

(a | b)输出结果61,二进制解释:0011 1101

^

按位异或运算符:当两对应的二进制相异时,结果为1

a ^ b)输出结果49,二进制解释:0011 0001

~

按位取反运算符:对数据的每个二进制取反,把1变为0,把0变为1,~x类似于-x-1

(~a )输出结果-61.二进制解释:1100 0011,在一个有符号二进制数的补码形式

<<

左移动运算符:运算符的各二进制全部左移若干位,由<<右边的数字指定了移动的位数,高位丢弃,低位补0

a << 2输出结果240,二进制解释:1111 0000

>>

右移动运算符:把>>左边的运算数的各二进制位全部右移若干位,>>右边的数字指定了移动的位数

a >> 2输出结果15,二进制解释:0000 1111

 

位运算:针对二进制进行的运算

&   |   ^   ~  <<    >>

 

 

Ture and Ture  ------>Ture

False and False------>False

&:

按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0

当二进制有重合时,结果时保留重合那部分的数值

1 为真   0 为假

n1 = 0b0110   #6

n2 = 0b0010   #2

print(n1 & n2)

 

0&0 ------> 0

1&1 ------> 1

1&0 ------> 0

0&1 ------> 0

nl 
168 
n2 = # 2 
169 
print(nl & n2) 
17î 
print(5 & 9) 
171 
172 
1 
173 
1 
174 
175 
176 
177 
* 20) 
178 
print(nl I n2) 
179 
print(5 | 9) 
188 
181 
182 
D:\python\python.exe C:/Users/zongzi/PycharmProjec 
2 
1 
6 
13

 

 

|:

按位或运算符:只要对应的两个二进制位1时,结果位就为1

二进制对比,有1就保留

print('*' *20)

print(n1|n2)

print(5|9)

168 
169 
170 
171 
E 173 
174 
175 
176 
177 
178 
179 
180 
181 
182 
nl - Ob0110 # 6 
print(nl & n2) 
print (5 & 9) 
1 
1 
print('*' * 20) 
print(nl I n2) 
print (5 | 9) 
D:\python\python.exe C:/Users/zongzi/PycharmProj 
2 
1 
6 
131 
Process finished with exit code

 

 

 

^:

按位异或运算符:当两对应的二进制相异时,结果为1

(异或)上下两个数位相同为0,不同为1

n1 = 0b0110   #6

n2 = 0b0010   #2

print(n1 ^ n2)

183 
181* 
185 
186 
nl - 0120110 
n2 = Ob001@ 
print(nl n2) 
D:\python\python.exe C:/Users/zongzi/Py 
4 
Process finished with exit code @

 

~:

按位取反运算符:对数据的每个二进制取反,把1变为0,把0变为1,~x类似于-x-1

 

n1 = 0b0110   #6

n2 = 0b0010   #2

print('*' *20)

print(~n1)   #0000 0110 ------> 取反:1111 1001

print(~5)   #0000 0101 ------> 1111 1010

 

 

二进制的负数表示:

原码  0110

反码  1001

补码  反码+1  1001

                     +     1

                 ---------------

                      1010

 

 

明确:

1.已知十进制负数,求二进制负数:

  ①.正数的原码  ②.原码取反 ③.加1 ------>  得到的二进制就是负数的二进制

 -7的进制:

   步骤:

   1.先求+7的二进制原码:0000 0111

   2.反码:1111 1000

   3.补码:1111 1001

  -7的二进制是:1111 1001

2.已知二进制的负数(判断是否是负的二进制的依据,看二进制的最高位:1111 1010,最高位是1则为负数,0则为整数)

  ①二进制(负的) ②二进制减1 ③取反 ④原码 将原码转成十进制,在十进制的前面添加负号:-

  已知:二进制:1111 1010,十进制表示    -6

    1111 1010

  -               1

--------------------

    1111 1001  ------> 反码

 

   原码:0000 0110 ------> 6

   -6

3.~5 ------> 就是将5的二进制取反

 

 

练习:

 1.~7 打印出来的十进制是多少?-8

     0000 0111 ------> 1111 1000

     减1:1111 0111

     取反 0000 1000

     原码 0000 1000

    十进制:-8

  2.-9的二进制表示  1111 0111

  3.~-4,打印出来的十进制是多少?3

      先得到-4的二进制

         00000100

       11111011

       11111100------>取反 0000 0011

  4.1111 1101 的十进制表示

     减1 11111100

     取反 00000011

     原码 00000011

     十进制 -3

 

 

<<

n = 12   # 00001100

print( n << 1)  # 24  12*2

print( n << 2)   # 48  12*2*2 往左移动两位,后面补两个零

print( n << 3)  # 96  12*2*2*2  

总结:12*2的n次方

 

n = 12 #00001100

print( n >> 1)  # 6  12//2 --->6

print( n >> 2)   # 3  12//4

print( n >> 3)   # 1    12//8

 

n = 89  右移五位

n = 93 左移三位

print(89 >> 5)

print(93 << 3)

 

二、运算符优先级

优 先 级 
最 高 
最 亻 氐 
运 算 符 
is is not 
in not in 
and or not 
庙 述 
扌 旨 数 ( 最 高 优 先 级 ) 
按 位 翻 转 , 一 元 加 号 和 减 号 ( 最 后 两 个 的 方 法 名 为 十@ 和 .@) 
乘 , 除 , 取 模 和 取 整 除 
加 法 减 法 
右 侈 , 左 移 运 算 符 
{S&l'AND 
比 较 运 篡 符 
等 于 运 算 符 
巛 值 运 篡 符 
身 份 运 算 符 
成 员 运 篇 符 
逻 辑 运 篡 符

1 
193 
194 
195 
196 
197 
198 
19 9 
x builtins.py 
20 
result 
print(result) 
1 
2 
print(b > a + x < a + b) # 2>21<3 
D:\python\python.exe C:/Users/zongzi/P' 
500 
False 
Process finished with exit code 6

 

x = 20

result = 20*5**2

a = 1

b = 2

print(b>a+x<a+b)

print(b>a+(x<a+b))   #Ture

print(a+False)  # False=0

 

总结:

1.算术运算符

2.赋值运算符 = += -=

3.比较运算符 > < == != …

4.逻辑运算符 and or not

5.位运算 & | ^ ~ << >> 负数的二进制

6.运算符的优先级 :()


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM