Python 整数(int)类型详解

在 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   # 对称差
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值