进位计数制、常用运算符 
更新: 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)  # 报错:非法赋值。运算优先级 
当我们在使用运算符进行运算时,是存在一个运算的先后顺序,也叫运算优先级,总结为如下三点:
- 优先级从高到低:算术运算符(
[**] > [*、%、/、//] > [+、-])> 位运算符 > 比较运算符 > 身份运算符 > 成员运算符 > 逻辑运算符 > 赋值运算符。 - 添加圆括号 
()可以提升运算符的优先级。 - 大部分运算符是从左向右进行计算(左结合),但赋值运算符、正负号、索引和切片是从右向左进行计算(右结合)。
 
