在 Python 中,整数(int
)类型 是最基础的数据类型之一,用于表示没有小数部分的数字。它可以是正数、负数或零,且支持非常大的数值范围,几乎不受限制。
1. 整数基础
1.1 整数表示
Python中的整数可以是任意大小(仅受内存限制):
a = 42 # 十进制
b = 0b101010 # 二进制 (42)
c = 0o52 # 八进制 (42)
d = 0x2A # 十六进制 (42)
e = 1_000_000 # 使用下划线提高可读性
1.2 类型检查
type(42) # <class 'int'>
isinstance(42, int) # True
2. 底层实现
2.1 PyLongObject结构
Python整数在C层面是可变长对象:
struct _longobject {
PyObject_VAR_HEAD
digit ob_digit[1]; // 存储实际数字的数组
};
2.2 整数存储方式
- 小整数(-5到256)被预先分配并缓存
- 大整数使用多个"digit"(通常为30位)存储
- 符号单独存储
2.3 内存占用
import sys
sys.getsizeof(0) # 24字节(基础开销)
sys.getsizeof(1) # 28字节
sys.getsizeof(2**30) # 32字节
sys.getsizeof(2**100) # 40字节
3. 数学运算
3.1 基础运算
# 算术运算
5 + 3 # 8
5 - 3 # 2
5 * 3 # 15
5 / 3 # 1.666... (返回float)
5 // 3 # 1 (地板除)
5 % 3 # 2 (取模)
5 ** 3 # 125 (幂运算)
3.2 位运算
5 & 3 # 1 (0101 & 0011 = 0001)
5 | 3 # 7 (0101 | 0011 = 0111)
5 ^ 3 # 6 (0101 ^ 0011 = 0110)
~5 # -6 (按位取反)
5 << 1 # 10 (左移1位)
5 >> 1 # 2 (右移1位)
3.3 数学函数
abs(-5) # 5
divmod(5, 3) # (1, 2)
pow(5, 3, 4) # 5**3 % 4 = 1
round(3.5) # 4 (注意返回float)
4. 高级特性
4.1 小整数缓存
Python缓存了常用小整数(-5到256):
a = 256
b = 256
a is b # True
c = 257
d = 257
c is d # False (大整数不缓存)
4.2 整数方法
int类型实现了许多特殊方法:
(5).__add__(3) # 8
(5).__bool__() # True
(0).__bool__() # False
(5).__index__() # 5 (用于切片等)
4.3 与其他类型交互
int(3.14) # 3 (截断小数)
int("42") # 42 (字符串转换)
int("1010", 2) # 10 (指定基数)
from fractions import Fraction
int(Fraction(7, 2)) # 3
5. 性能优化
5.1 使用位运算加速
# 判断奇偶
if x & 1: # 比 x % 2 更快
print("奇数")
# 乘以2的幂次
x << 3 # 等价于 x * 8
# 除以2的幂次
x >> 2 # 等价于 x // 4
5.2 预计算常量
# 较差
result = x * 1024
# 较好
_KB = 1024
result = x * _KB
6. 特殊整数操作
6.1 进制转换
bin(42) # '0b101010'
oct(42) # '0o52'
hex(42) # '0x2a'
format(42, '04x') # '002a'
6.2 位操作技巧
# 检查是否是2的幂
def is_power_of_two(x):
return x > 0 and (x & (x - 1)) == 0
# 最低有效位
x & -x
# 交换变量
a ^= b
b ^= a
a ^= b
7. 大整数处理
7.1 超大整数运算
Python原生支持大整数:
2**1000 # 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
7.2 内存考虑
处理极大整数时注意内存消耗:
import sys
huge = 10**1000000 # 创建约400KB的大整数
8. 安全注意事项
8.1 整数溢出
Python整数不会溢出,但要注意:
# 安全
x = 2**10000
# 但转换为其他类型可能溢出
import numpy as np
np.int32(2**31 - 1) # 2147483647
np.int32(2**31) # -2147483648 (溢出)
8.2 用户输入处理
# 危险:可能耗尽内存
x = int(input("Enter number: "))
# 较安全:限制输入大小
max_bits = 1024
s = input("Enter number: ")
if len(s) > max_bits // 3: # 保守估计
raise ValueError("Number too large")
x = int(s)
9. 扩展应用
9.1 加密算法实现
# 模幂运算 (a^b mod m)
def mod_pow(a, b, m):
result = 1
a = a % m
while b > 0:
if b % 2 == 1:
result = (result * a) % m
a = (a * a) % m
b = b >> 1
return result
9.2 位集合表示
# 用整数表示集合
SET_A = 0b10101 # 包含元素0,2,4
SET_B = 0b01110 # 包含元素1,2,3
union = SET_A | SET_B # 并集
intersection = SET_A & SET_B # 交集
difference = SET_A ^ SET_B # 对称差