
进位计数制、常用运算符
更新: 2025/2/24 字数: 0 字 时长: 0 分钟
进位计数制
进位计数制,简称“进制”,是人为定义的进位计数方法。比如生活中常用的十进制计数法,特点就是满十进一。当然也有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法等。
二进制
二进制:一种满二进一的进位计数法。在计算机中的所有数据本质都是类似于 01010101 的二进制数。
- 基数:从小到大依次为 0、1。
- 特点:基数共 2 位,满二进一。
- 形式:在 Python 中前缀
0B
或0b
加数字表示二进制数。
0b001 # 正确
0b100 # 正确
0B001 # 正确
0B100 # 正确
0B123 # 错误,数字2、3不在基数中。
八进制
八进制:一种满八进一的进位计数法。八进制数和二进制数可以按位对应,因此它常应用在计算机语言中。
- 基数:从小到大依次为 0、1、2、3、4、5、6、7。
- 特点:基数共 8 位,满八进一。
- 形式:在 Python 中前缀
0O
或0o
加数字表示八进制数。
0o007 # 正确
0o567 # 正确
0O007 # 正确
0O567 # 正确
0O789 # 错误,数字8、9不在基数中。
八进制转二进制:一位八进制转换成三位二进制。
第一位 | 第二位 | 合并 | |
---|---|---|---|
八进制 | 2 | 3 | 23 |
二进制 | 010 | 011 | 010 011 |
十进制
十进制:一种满十进一的进位计数法。因为我们人类有十个手指头,所以很自然的选择了十进制,因此我们日常生活中最常用的数字也都是十进制中的数字。
- 基数:从小到大依次为 0、1、2、3、4、5、6、7、8、9。
- 特点:基数共 10 位,满十进一。
- 形式:在 Python 中无前缀的纯数字表示十进制数,注意数字 0 不能在首位。
11111 # 正确
22222 # 正确
33333 # 正确
12345 # 正确
54321 # 正确
00007 # 错误,数字0不能在首位。
十进制转二进制:除二反向取余。
除二 | 商 | 余数 | 反向合并 |
---|---|---|---|
25 ÷ 2 | 12 | 1 | 11001 |
12 ÷ 2 | 6 | 0 | 1100 |
6 ÷ 2 | 3 | 0 | 110 |
3 ÷ 2 | 1 | 1 | 11 |
1 ÷ 2 | 0 | 1 | 1 |
十六进制
十六进制:一种满十六进一的进位计数法。十六进制数和二进制数可以按位对应,因此它常用来表示计算机数据。
- 基数:从小到大依次为 0、1、2、3、4、5、6、7、8、9、A/a、B/b、C/b、D/d、E/e、F/f。
- 特点:基数共 16 位,满十六进一。
- 形式:在 Python 中前缀
0X
或0x
加数字或特定的字母表示十六进制数,如果前面是大写X
,则后面的字母都要大写,反之都要小写。
0xaa5 # 正确
0xaaf # 正确
0XAA5 # 正确
0XAAF # 正确
0XAa5 # 不规范,前面X大写,后面十六进制字母都要大写。
0xcg2 # 错误,字母g不在基数中。
十六进制转二进制:一位十六进制转换四位二进制。
第一位 | 第二位 | 合并 | |
---|---|---|---|
十六进制 | 2 | F | 2F |
二进制 | 0010 | 1111 | 0010 1111 |
进制转换
在 Python 中提供了进制转换的内置函数,具体使用方法如下:
- 转换为二进制:将二进制、八进制、十进制、十六进制放入
bin
函数中,最终都会输出二进制。
print(bin(0b11001)) # 输出:0b11001。注释:二进制数通过bin输出会直接转换为二进制数
print(bin(0o176)) # 输出:0b1111110。注释:八进制数通过bin输出会直接转换为二进制数
print(bin(1427)) # 输出:0b10110010011。注释:十进制数通过bin输出会直接转换为二进制数。
print(bin(0x1a)) # 输出:0b11010。注释:十六进制数通过bin输出会直接转换为二进制数。
- 转换为八进制:将二进制、八进制、十进制、十六进制放入
oct
函数中,最终都会输出八进制。
print(oct(0b11001)) # 输出:0o31。注释:二进制数通过oct输出会直接转换为八进制数
print(oct(0o176)) # 输出:0o176。注释:八进制数通过oct输出会直接转换为八进制数
print(oct(1427)) # 输出:0o2623。注释:十进制数通过oct输出会直接转换为八进制数。
print(oct(0x1a)) # 输出:0o32。注释:十六进制数通过oct输出会直接转换为八进制数。
- 转换为十进制:将二进制、八进制、十进制、十六进制放入
print
函数中,最终都会输出十进制。
print(0b11001) # 输出:25。注释:二进制数通过print输出会直接转换为十进制数
print(0o176) # 输出:126。注释:八进制数通过print输出会直接转换为十进制数
print(1427) # 输出:1427。注释:十进制数通过print输出会直接转换为十进制数。
print(0x1a) # 输出:26。注释:十六进制数通过print输出会直接转换为十进制数。
- 转换为十六进制:将二进制、八进制、十进制、十六进制放入
hex
函数中,最终都会输出十六进制。
print(hex(0b11001)) # 输出:0x19。注释:二进制数通过hex输出会直接转换为十六进制数
print(hex(0o176)) # 输出:0x7e。注释:八进制数通过hex输出会直接转换为十六进制数
print(hex(1427)) # 输出:0x593。注释:十进制数通过hex输出会直接转换为十六进制数。
print(hex(0x1a)) # 输出:0x1a。注释:十六进制数通过hex输出会直接转换为十六进制数。
常用运算符
Python 语言支持多种用于执行各种数学和逻辑运算的运算符,下面对其进行罗列。
算术运算符
算术运算符:用于执行数学运算,包括加(+
)、减(-
)、乘(*
)、除(/
)、整除(//
)、取模(%
)和幂运算(**
)。
# 加法+
print(2 + 3) # 输出:5
# 减法-
print(6 - 4) # 输出:2
# 乘法*
print(3 * 2) # 输出:6
# 除法/
print(8 / 4) # 输出:2.0
# 整除//
print(8 // 5) # 输出:1。注释:8/5=1...3(只取商数)
# 取模%
print(8 % 4) # 输出:0。注释:8/4=2...0(只取余数)
# 幂运算**
print(2 ** 3) # 输出:8。注释:2**3=8(2的3次方等于8)
位运算符
位运算符:对整数进行位运算,包括按位与(&
)、按位或(|
)、按位异或(^
)、按位取反(~
)、左移(<<
)、右移(>>
)。
# 左移<<
print(3<<2) # 输出:12。注释:3的二进制是11,<<2就是左移2位,变成1100,十进制就是12。
# 右移>>
print(3>>2) # 输出:0。注释:3的二进制是11,>>2就是右移2位,变成0,十进制就是0。
比较运算符
比较运算符:用于比较两个值的大小或是否相等,包括小于(<
)、大于(>
)、等于(==
)、不等于(!=
)、小于等于(<=
)、大于等于(>=
),返回结果为布尔值 True
(条件成立)或布尔值 False
(条件不成立)。
# 大于>
print(6 > 5) # 输出:True
print(1 > 2) # 输出:False
# 大于等于>=
print(1 >= 1) # 输出:True
print(1 >= 2) # 输出:False
# 小于<
print(1 < 5) # 输出:True
print(3 < 2) # 输出:False
# 小于等于<=
print(5 <= 5) # 输出:True
print(7 <= 2) # 输出:False
# 等于==
print(5 == 5) # 输出:True
print(1 == 2) # 输出:False
# 不等于!=
print(1 != 5) # 输出:True
print(1 != 1) # 输出:False
链式比较:多个比较运算符可以从左至右进行链式比较,只有当每个比较运算符的结果都为 True
时,最后的结果才为 True
,只要出现一个结果为 False
,最后的结果都为 Fasle
。
print(10 < 15) # 输出:True
print(10 < 15 <= 20) # 输出:True
print(10 < 15 <= 20 != 20) # 输出:False
身份运算符
身份运算符:用于判断变量所引用的对象是否为同一个对象,包括(is
)判断是同一个对象和(is not
)判断不是同一个对象,返回结果为布尔值 True
(条件成立)或布尔值 False
(条件不成立)。
a = 10 # 注释:变量a变成了对象10的一个引用。
b = 10 # 注释:变量b变成了对象10的一个引用。
print(a is b) # 输出:True。注释:变量a和变量b引用的是同一个对象。
print(a is not b) # 输出:Flase。注释:变量a和变量b引用的是同一个对象。
a = 10 # 注释:变量a变成了对象10的一个引用。
b = 11 # 注释:变量b变成了对象11的一个引用。
print(a is b) # 输出:Flase。注释:变量a和变量b引用的不是同一个对象。
print(a is not b) # 输出:True。注释:变量a和变量b引用的不是同一个对象。
成员运算符
成员运算符:用于判断一个对象是否存在于另一个对象中,包括(in
)判断存在于另一个对象中和(not in
)判断不存在于另一个对象中,返回结果为布尔值 True
(条件成立)或布尔值 False
(条件不成立)。
a = 10 # 注释:变量a变成了对象10的一个引用。
b = [9, 10, 11] # 注释:变量b变成了对象[9, 10, 11]的一个引用。
print(a in b) # 输出:True。注释:对象10存在于对象[9, 10, 11]中。
print(a not in b) # 输出:Flase。注释:对象10存在于对象[9, 10, 11]中。
逻辑运算符
逻辑运算符:用于组合多个条件语句,包括与(and
)、或(or
)和非(not
),返回结果为布尔值 True
(条件成立)或布尔值 False
(条件不成立)。
- 与(
and
):多个条件语句中,只要有一个条件语句的布尔值是False
,其结果就是布尔值False
。
print(1 < 5) # 输出:True
print(1 < 5 and 3 > 2) # 输出:True
print(1 < 5 and 3 > 2 and 5 > 7) # 输出:Flase
- 或(
or
):多个条件语句中,只要有一个条件语句的布尔值是True
,其结果就是布尔值True
。
print(1 < 5) # 输出:True
print(1 < 5 or 3 > 2) # 输出:True
print(1 < 5 or 3 > 2 or 5 > 7) # 输出:True
- 非(
not
):条件语句的布尔值是False
,那么结果就是布尔值True
;条件语句的布尔值是True
,那么结果就是布尔值False
。
print(not 1 < 5) # 输出:False
print(not 5 > 7) # 输出:True
建议
与(and
)、或(or
)两个运算符有短路的功能,只要某一组是特定的布尔值,就会直接输出这组布尔值,后面的逻辑运算符也就不会参与运算。
赋值运算符
赋值运算符:将赋值符号右边的值赋给赋值符号左边的变量,包括等号(=
)、等于(+=
)、减等于(-=
)、乘等于(*=
)、除等于(/=
)、模等于(%=
)、幂等于(**=
)、整除等于(//=
)。
a = 100 # 注释:将100赋值给变量a。
print(a) # 输出:100
a += 100 # 注释:a = a + 100。
print(a) # 输出:200
a -= 50 # 注释:a = a - 50。
print(a) # 输出:150
a *= 2 # 注释:a = a * 2。
print(a) # 输出:300
a /= 3 # 注释:a = a / 3。
print(a) # 输出:100
a %= 12 # 注释:a = a % 12。
print(a) # 输出:4
a **= 2 # 注释:a = a ** 2。
print(a) # 输出:16
a //= a + 1 # 注释:a = a // ( a + 1 )
print(a) # 输出:0
链式赋值:赋值符号可以连用,但要注意当中的括号。
a = b = 5 + 1 # 注释:正确赋值。
a = b = (5 + 1) # 注释:正确赋值。
a = (b = 5 + 1) # 报错:非法赋值。
运算优先级
当我们在使用运算符进行运算时,是存在一个运算的先后顺序,也叫运算优先级,总结为如下三点:
- 优先级从高到低:算术运算符(
[**] > [*、%、/、//] > [+、-]
)> 位运算符 > 比较运算符 > 身份运算符 > 成员运算符 > 逻辑运算符 > 赋值运算符。 - 添加圆括号
()
可以提升运算符的优先级。 - 大部分运算符是从左向右进行计算(左结合),但赋值运算符、正负号、索引和切片是从右向左进行计算(右结合)。