Skip to content

进位计数制、常用运算符

更新: 2025/2/24 字数: 0 字 时长: 0 分钟

进位计数制

进位计数制,简称“进制”,是人为定义的进位计数方法。比如生活中常用的十进制计数法,特点就是满十进一。当然也有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法等。

二进制

二进制:一种满二进一的进位计数法。在计算机中的所有数据本质都是类似于 01010101 的二进制数。

  • 基数:从小到大依次为 0、1。
  • 特点:基数共 2 位,满二进一。
  • 形式:在 Python 中前缀 0B0b 加数字表示二进制数。
python
0b001  # 正确
0b100  # 正确
0B001  # 正确
0B100  # 正确
0B123  # 错误,数字2、3不在基数中。

八进制

八进制:一种满八进一的进位计数法。八进制数和二进制数可以按位对应,因此它常应用在计算机语言中。

  • 基数:从小到大依次为 0、1、2、3、4、5、6、7。
  • 特点:基数共 8 位,满八进一。
  • 形式:在 Python 中前缀 0O0o 加数字表示八进制数。
python
0o007  # 正确
0o567  # 正确
0O007  # 正确
0O567  # 正确
0O789  # 错误,数字8、9不在基数中。

八进制转二进制:一位八进制转换成三位二进制。

第一位第二位合并
八进制2323
二进制010011010 011

十进制

十进制:一种满十进一的进位计数法。因为我们人类有十个手指头,所以很自然的选择了十进制,因此我们日常生活中最常用的数字也都是十进制中的数字。

  • 基数:从小到大依次为 0、1、2、3、4、5、6、7、8、9。
  • 特点:基数共 10 位,满十进一。
  • 形式:在 Python 中无前缀的纯数字表示十进制数,注意数字 0 不能在首位。
python
11111  # 正确
22222  # 正确
33333  # 正确
12345  # 正确
54321  # 正确
00007  # 错误,数字0不能在首位。

十进制转二进制:除二反向取余。

除二余数反向合并
25 ÷ 212111001
12 ÷ 2601100
6 ÷ 230110
3 ÷ 21111
1 ÷ 2011

十六进制

十六进制:一种满十六进一的进位计数法。十六进制数和二进制数可以按位对应,因此它常用来表示计算机数据。

  • 基数:从小到大依次为 0、1、2、3、4、5、6、7、8、9、A/a、B/b、C/b、D/d、E/e、F/f。
  • 特点:基数共 16 位,满十六进一。
  • 形式:在 Python 中前缀 0X0x 加数字或特定的字母表示十六进制数,如果前面是大写 X,则后面的字母都要大写,反之都要小写。
python
0xaa5  # 正确
0xaaf  # 正确
0XAA5  # 正确
0XAAF  # 正确
0XAa5  # 不规范,前面X大写,后面十六进制字母都要大写。
0xcg2  # 错误,字母g不在基数中。

十六进制转二进制:一位十六进制转换四位二进制。

第一位第二位合并
十六进制2F2F
二进制001011110010 1111

进制转换

在 Python 中提供了进制转换的内置函数,具体使用方法如下:

  • 转换为二进制:将二进制、八进制、十进制、十六进制放入 bin 函数中,最终都会输出二进制。
python
print(bin(0b11001))  # 输出:0b11001。注释:二进制数通过bin输出会直接转换为二进制数
print(bin(0o176))    # 输出:0b1111110。注释:八进制数通过bin输出会直接转换为二进制数
print(bin(1427))     # 输出:0b10110010011。注释:十进制数通过bin输出会直接转换为二进制数。
print(bin(0x1a))     # 输出:0b11010。注释:十六进制数通过bin输出会直接转换为二进制数。
  • 转换为八进制:将二进制、八进制、十进制、十六进制放入 oct 函数中,最终都会输出八进制。
python
print(oct(0b11001))  # 输出:0o31。注释:二进制数通过oct输出会直接转换为八进制数
print(oct(0o176))    # 输出:0o176。注释:八进制数通过oct输出会直接转换为八进制数
print(oct(1427))     # 输出:0o2623。注释:十进制数通过oct输出会直接转换为八进制数。
print(oct(0x1a))     # 输出:0o32。注释:十六进制数通过oct输出会直接转换为八进制数。
  • 转换为十进制:将二进制、八进制、十进制、十六进制放入 print 函数中,最终都会输出十进制。
python
print(0b11001)       # 输出:25。注释:二进制数通过print输出会直接转换为十进制数
print(0o176)         # 输出:126。注释:八进制数通过print输出会直接转换为十进制数
print(1427)          # 输出:1427。注释:十进制数通过print输出会直接转换为十进制数。
print(0x1a)          # 输出:26。注释:十六进制数通过print输出会直接转换为十进制数。
  • 转换为十六进制:将二进制、八进制、十进制、十六进制放入 hex 函数中,最终都会输出十六进制。
python
print(hex(0b11001))  # 输出:0x19。注释:二进制数通过hex输出会直接转换为十六进制数
print(hex(0o176))    # 输出:0x7e。注释:八进制数通过hex输出会直接转换为十六进制数
print(hex(1427))     # 输出:0x593。注释:十进制数通过hex输出会直接转换为十六进制数。
print(hex(0x1a))     # 输出:0x1a。注释:十六进制数通过hex输出会直接转换为十六进制数。

常用运算符

Python 语言支持多种用于执行各种数学和逻辑运算的运算符,下面对其进行罗列。

算术运算符

算术运算符:用于执行数学运算,包括加(+)、减(-)、乘(*)、除(/)、整除(//)、取模(%)和幂运算(**)。

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)

位运算符

位运算符:对整数进行位运算,包括按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)、右移(>>)。

python
# 左移<<
print(3<<2)  # 输出:12。注释:3的二进制是11,<<2就是左移2位,变成1100,十进制就是12。

# 右移>>
print(3>>2)  # 输出:0。注释:3的二进制是11,>>2就是右移2位,变成0,十进制就是0。

比较运算符

比较运算符:用于比较两个值的大小或是否相等,包括小于(<)、大于(>)、等于(==)、不等于(!=)、小于等于(<=)、大于等于(>=),返回结果为布尔值 True(条件成立)或布尔值 False(条件不成立)。

python
# 大于>
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

python
print(10 < 15)              # 输出:True
print(10 < 15 <= 20)        # 输出:True
print(10 < 15 <= 20 != 20)  # 输出:False

身份运算符

身份运算符:用于判断变量所引用的对象是否为同一个对象,包括(is)判断是同一个对象和(is not)判断不是同一个对象,返回结果为布尔值 True(条件成立)或布尔值 False(条件不成立)。

python
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(条件不成立)。

python
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
python
print(1 < 5)                      # 输出:True
print(1 < 5 and 3 > 2)            # 输出:True
print(1 < 5 and 3 > 2 and 5 > 7)  # 输出:Flase
  • 或(or:多个条件语句中,只要有一个条件语句的布尔值是 True,其结果就是布尔值 True
python
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
python
print(not 1 < 5)  # 输出:False
print(not 5 > 7)  # 输出:True

建议

与(and)、或(or)两个运算符有短路的功能,只要某一组是特定的布尔值,就会直接输出这组布尔值,后面的逻辑运算符也就不会参与运算。

赋值运算符

赋值运算符:将赋值符号右边的值赋给赋值符号左边的变量,包括等号(=)、等于(+=)、减等于(-=)、乘等于(*=)、除等于(/=)、模等于(%=)、幂等于(**=)、整除等于(//=)。

python
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

链式赋值:赋值符号可以连用,但要注意当中的括号。

python
a = b = 5 + 1    # 注释:正确赋值。
a = b = (5 + 1)  # 注释:正确赋值。
a = (b = 5 + 1)  # 报错:非法赋值。

运算优先级

当我们在使用运算符进行运算时,是存在一个运算的先后顺序,也叫运算优先级,总结为如下三点:

  1. 优先级从高到低:算术运算符([**] > [*、%、/、//] > [+、-])> 位运算符 > 比较运算符 > 身份运算符 > 成员运算符 > 逻辑运算符 > 赋值运算符。
  2. 添加圆括号 () 可以提升运算符的优先级。
  3. 大部分运算符是从左向右进行计算(左结合),但赋值运算符、正负号、索引和切片是从右向左进行计算(右结合)。