-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmath_operator.py
More file actions
189 lines (156 loc) · 7.91 KB
/
math_operator.py
File metadata and controls
189 lines (156 loc) · 7.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
#!/usr/bin/env python3
# encoding: utf-8
# @author: hoojo
# @email: hoojo_@126.com
# @github: https://github.com/hooj0
# @create date: 2017-10-23 22:25:32
# @copyright by hoojo@2018
# @changelog Added python3 `math->math operator` example
# math_operator.py
'''
---------------------------------算术运算-----------------------------------------------
运算符 描述 实例
+ 加 - 两个对象相加 a + b 输出结果 31
- 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -11
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 210
/ 除 - x 除以 y b / a 输出结果 2.1
% 取模 - 返回除法的余数 b % a 输出结果 1
** 幂 - 返回x的y次幂 a**b 为10的21次方
// 取整除 - 返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0
---------------------------------赋值运算------------------------------------------------
运算符 描述 实例
= 简单的赋值运算符 c = a + b 将 a + b 的运算结果赋值为 c
+= 加法赋值运算符 c += a 等效于 c = c + a
-= 减法赋值运算符 c -= a 等效于 c = c - a
*= 乘法赋值运算符 c *= a 等效于 c = c * a
/= 除法赋值运算符 c /= a 等效于 c = c / a
%= 取模赋值运算符 c %= a 等效于 c = c % a
**= 幂赋值运算符 c **= a 等效于 c = c ** a
//= 取整除赋值运算符 c //= a 等效于 c = c // a
---------------------------------位运算符-----------------------------------------------
运算符 描述 实例
& 按位与运算符:参与运算的两个值,如果两个相应位都为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 (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。
<< 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 a << 2 输出结果 240 ,二进制解释: 1111 0000
>> 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数 a >> 2 输出结果 15 ,二进制解释: 0000 1111
--------------------------------------------------------------------------------
Python运算符优先级
以下表格列出了从最高到最低优先级的所有运算符:
运算符 描述
** 指数 (最高优先级)
~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法减法
>> << 右移,左移运算符
& 位 'AND'
^ | 位运算符
<= < > >= 比较运算符
<> == != 等于运算符
= %= /= //= -= += *= **= 赋值运算符
is/is not 身份运算符
in/not in 成员运算符
not or and 逻辑运算符
'''
print('---------------------算术运算------------------------')
# 加法运算
print('加法运算:', 10 + 2)
print('加法运算:', 10 + (-3))
print()
# 减法运算
print('减法运算:', 10 - 5)
print('减法运算:', -10 - 5)
print()
# 乘法运算
print('乘法运算:', 3 * 5)
print()
# 乘方
print('乘方运算:', 3 ** 2)
print()
# 除法运算
print('除法运算:', 10 / 3)
print('除法运算:', 7 / 5)
print()
# 除法取整数
print('除法取整数:', 10 // 3)
print('除法取整数:', 7 // 5)
print()
# 取模运算,余数
print('取模运算:', 10 % 3)
print('取模运算:', 5 % 3)
print('---------------------赋值运算------------------------')
# 赋值操作
a = 10
b = 5
c = 0
c = a + b
print('a + b', c)
c += a
print('c += a', c)
c -= a
print('c -= a', c)
c *= a
print('c *= a', c)
c /= a
print('c /= a', c)
c //= a
print('c //= a', c)
c %= a
print('c /= a', c)
c **= a
print('c **= a', c)
print('---------------------位运算符---------------------------------')
# 位运算符
'''
10进制转2进制:<除2取余,逆序排列> 将10进制数除以2,取余数。然后再用结果继续除以2;一直重复,直到结果为0停止
具体做法是:
用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,
如此进行,直到商为0时为止,
然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
也叫“倒序取余”
example:
60 / 2 = 30 -----> 0
30 / 2 = 15 -----> 0
15 / 2 = 7 -----> 1
7 / 2 = 3 -----> 1
3 / 2 = 1 -----> 1
1 / 2 = 0 -----> 1
从下往上取余数:111100,前面不够8位数补0:0011 1100
example2:
13 / 2 = 6 -----> 1
6 / 2 = 3 -----> 0
3 / 2 = 1 -----> 1
1 / 2 = 0 -----> 1
从下往上取余数:1101,前面不够8位数补0:0000 1101
2进制转10进制:首先将二进制数补齐位数,首位如果是0就代表是正整数,如果首位是1则代表是负整数。
先看首位是0的正整数,补齐位数以后,将二进制中的位数分别将下边对应的值相乘,然后相加得到的就为十进制
example:
0000 1100 ----> 二进制
7654 3210 ----> 位置索引,从后算起
0 x 2^0 = 0 ---> 二进制 x 2 ^ 位置索引
0 x 2^1 = 0
1 x 2^2 = 4
1 x 2^3 = 8
0 x 2^4 = 0
0 x 2^5 = 0
0 x 2^6 = 0
0 x 2^7 = 0
结果相加:0 + 0 + 4 + 8 + 0 + 0 + 0 + 0 = 12
'''
a = 60 # 0011 1100
b = 13 # 0000 1101
# 按位与运算符
print('a & b ->', a & b) # 0000 1100 -> 12
# 按位或运算符
print('a | b ->', a | b) # 0011 1101 -> 0,2,3,4,5 有数据,2^0 + 2^2 + 2^3 + 2^4 + 2^5 = 1 + 4 + 8 + 16 + 32
# 按位异或运算符
print('a ^ b ->', a ^ b) # 0011 0001 -> 0,4,5 ---> 2^0 + 2^4 + 2^5 = 1 + 16 + 32
# 按位取反运算符
print('~a ->', ~a) # 1100 0011 -> 首位为1,是负数,取反:-0011 1100 -> 2,3,4,5 ---> 2^2 + 2^3 + 2^4 + 2^5 = 1 + 4 + 8 + 16 + 32 = 60 + 1
print('~b ->', ~b) # 1111 0010 -> 首位为1,是负数,取反:-0000 1101
# 左移动运算符
print('a << 2 ->', a << 2) # 1111 0000 -> 2^4 + 2^5 + 2^6 + 2^7
# 右移动运算符
print('a >> 2 ->', a >> 2) # 0000 1111 -> 2^0 + 2^1 + 2^2 + 2^3
input('按任意键退出')