查看: 88|回复: 1

Python整数int详解:进制转换、无限精度、位运算与常见陷阱

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
Python的整数类型(int)没有大小限制,支持多种进制,且内置了丰富的运算规则。本文从基础表示到实际场景,系统讲解int的使用技巧和常见误区。

基本表示与进制转换

十进制整数可直接书写。Python 3.6+允许在数字中使用下划线提升可读性,解释器会自动忽略该分隔符:
  1. x = 42
  2. population = 14_0000_0000  # 14亿
复制代码

其他进制需加前缀:
  1. binary = 0b1010       # 二进制
  2. octal = 0o17         # 八进制
  3. hex_num = 0xFF       # 十六进制
复制代码

进制转换函数:
  1. n = 255
  2. print(bin(n))   # '0b11111111'
  3. print(oct(n))   # '0o377'
  4. print(hex(n))   # '0xff'
  5. # 去掉前缀用format
  6. print(format(n, 'b'))     # '11111111'
  7. print(format(n, '08b'))   # 填充至8位
  8. # 字符串转整数指定进制
  9. print(int('1010', 2))     # 10
  10. print(int('ff', 16))      # 255
  11. print(int('0xff', 0))     # 自动检测进制
复制代码

算术运算与整除细节

基本运算:加、减、乘、除(结果浮点)、整除、取余、幂:
  1. a, b = 17, 5
  2. print(a + b)   # 22
  3. print(a / b)   # 3.4(浮点数)
  4. print(a // b)  # 3(向下取整)
  5. print(a % b)   # 2
  6. print(a ** b)  # 1419857
复制代码

整除是向下取整,而非向零取整,负数时需要注意:
  1. print(-10 // 3)   # -4
  2. print(10 // -3)   # -4
  3. print(-10 % 3)    # 2(根据公式a = b*(a//b) + (a%b))
  4. print(10 % -3)    # -2
复制代码

复合赋值运算符:
  1. x = 10
  2. x += 5   # x=15
  3. x /= 4   # 注意:/ 运算符使x变为浮点
复制代码

内置函数:pow支持模幂运算,divmod同时返回商和余数,round采用银行家舍入(0.5时舍入到偶数):
  1. print(pow(2, 10, 1000))   # 24 (2^10 mod 1000)
  2. print(divmod(17, 5))      # (3, 2)
  3. print(round(3.5))         # 4
  4. print(round(4.5))         # 4(银行家舍入)
复制代码

无限精度与内部缓存

Python int可以存储任意大的整数,仅受内存限制:
  1. def factorial(n):
  2.     result = 1
  3.     for i in range(1, n+1):
  4.         result *= i
  5.     return result
  6. print(f'100! = {factorial(100)}')  # 输出长达158位的结果
  7. big = 2**1000
  8. print(len(str(big)))  # 302位数字
复制代码

内部实现中,小整数(-5到256)会被缓存复用,大整数则不缓存。但判断整数相等永远使用 == 而非 is:
  1. a, b = 100, 100
  2. print(a is b)   # True(缓存)
  3. a, b = 1000, 1000
  4. print(a is b)   # False(未缓存,实际依赖实现)
复制代码

类型转换与安全处理

int()函数可转换浮点数(截断)、字符串(支持空格和下划线)、指定进制:
  1. print(int(3.99))       # 3(截断)
  2. print(int('42 '))      # 42
  3. print(int('1_000'))    # 1000
  4. print(int('FF', 16))   # 255
  5. # 浮点数字符串不能直接转,需先转float
  6. print(int(float('3.14')))  # 3
复制代码

整型转其他类型:
  1. n = 42
  2. print(str(n))          # '42'
  3. print(float(n))        # 42.0
  4. print(bool(n))         # True
  5. print(n.to_bytes(2, 'big'))  # b'\x00*'
复制代码

安全转换函数:
  1. def safe_int_convert(value, default=0):
  2.     try:
  3.         return int(value)
  4.     except (ValueError, TypeError):
  5.         return default
复制代码

实际应用场景

计数器与索引:
  1. even_count = sum(1 for i in range(1, 101) if i % 2 == 0)  # 50
复制代码

分页计算:向上取整公式 (total + page_size - 1) // page_size:
  1. total_pages = (total_items + page_size - 1) // page_size
复制代码

位运算实现权限管理:
  1. READ = 0b0001
  2. WRITE = 0b0010
  3. DELETE = 0b0100
  4. ADMIN = 0b1000
  5. user_perm = READ | WRITE
  6. has_delete = bool(user_perm & DELETE)  # False
  7. user_perm |= DELETE
  8. user_perm &= ~WRITE
复制代码

时间戳获取与计算:
  1. import time, datetime
  2. ts = int(time.time())
  3. dt = datetime.datetime.fromtimestamp(ts)
  4. start = time.time()
  5. time.sleep(1.5)
  6. elapsed_ms = int((time.time() - start) * 1000)
复制代码

常见陷阱与注意事项

1. 整除/混淆:统计平均值时误用 // 会导致结果被截断,应使用 /。
2. 大整数性能:超大整数的乘除运算效率会显著下降,需要评估。
3. 溢出不存在:Python int理论上无上限,无需担心回绕问题。
4. 判断相等始终用 ==,不用 is(小整数缓存仅是实现细节)。

实用工具函数

以下工具函数直接可用:
  1. def is_even(n): return n % 2 == 0
  2. def is_prime(n):
  3.     if n < 2: return False
  4.     if n < 4: return True
  5.     if n % 2 == 0 or n % 3 == 0: return False
  6.     i = 5
  7.     while i * i <= n:
  8.         if n % i == 0 or n % (i+2) == 0: return False
  9.         i += 6
  10.     return True
  11. def get_digits(n): return [int(d) for d in str(abs(n))]
  12. def is_palindrome_number(n):
  13.     s = str(n)
  14.     return s == s[::-1]
  15. def gcd(a, b):
  16.     while b: a, b = b, a % b
  17.     return a
  18. def lcm(a, b): return a * b // gcd(a, b)
复制代码

总结:Python的int类型具备了无限精度、多种进制表示、丰富的运算支持,以及便捷的类型转换。掌握整除的向下取整行为、位运算技巧、以及避免不必要的 is 判断,即可在日常编程中高效使用整数。
回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层

Re: Python整数int详解:进制转换、无限精度、位运算与常见陷阱

感谢楼主的系统总结,非常清晰!尤其注意到你提到了 Python 整除是向下取整而非向零取整,这个点在实际中很容易被忽略,配合 `%` 的符号规律也讲得很清楚。另外银行家舍入的演示也很实用——平时用 `round` 时确实要小心“4.5 舍到 4”这类行为。想请教一个场景:当需要向零取整的整数除法时,比如金融计算中截断小数部分,除了先用 `int(a / b)`,有没有更直接的高效写法?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-10 12:04 , Processed in 0.023902 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部