Hướng dẫn này sẽ thảo luận về giá trị số nguyên tối đa trong các phiên bản khác nhau của Python và cách chúng ta có thể lấy nó
Trong Python 2, một số nguyên và một số nguyên dài là các kiểu dữ liệu khác nhau. Một số nguyên có giới hạn từ 231 - 1, nếu giá trị vượt quá giới hạn thì kiểu dữ liệu của biến sẽ tự động chuyển sang long và không có ngoại lệ nào được đưa ra. Khi kiểu dữ liệu biến được chuyển sang kiểu dữ liệu dài, nó có thể lớn bằng khả năng lưu trữ của máy, nghĩa là không có giới hạn rõ ràng về độ dài trong Python 2
Trong Python 3, chúng tôi không có các kiểu dữ liệu số nguyên và dài riêng biệt, điều đó có nghĩa là kiểu dữ liệu biến sẽ không được chuyển đổi sau khi vượt quá giới hạn 231 - 1. Nói tóm lại, số nguyên trong Python 3 hoạt động giống như long trong Python 2 và có thể có giá trị lớn bằng khả năng lưu trữ của máy.
Nhận Giá trị Số nguyên Tối đa bằng Python Sử dụng Mô-đun sys
Như chúng ta đã thảo luận ở trên, không có giới hạn hoặc giá trị tối đa của một số nguyên trong Python 3, nhưng có một giới hạn cho số nguyên trong Python 2, sau đó kiểu dữ liệu của biến chuyển sang kiểu dữ liệu dài.
Chúng ta có thể lấy giá trị số nguyên lớn nhất trong Python 2 bằng cách sử dụng sys.maxint
, bằng 231 - 1. Mã ví dụ dưới đây trình bày cách sử dụng sys.maxint
để lấy giá trị số nguyên tối đa trong Python 2
import sys
print[sys.maxint]
đầu ra
Trong Python 3, sys.maxint
không tồn tại vì không có giới hạn hoặc giá trị tối đa cho kiểu dữ liệu số nguyên. Nhưng chúng ta có thể sử dụng sys.maxsize
để lấy giá trị lớn nhất của loại Py_ssize_t
trong Python 2 và 3. Nó cũng là kích thước tối đa mà danh sách, chuỗi, từ điển và các loại vùng chứa tương tự có thể có
Mã ví dụ dưới đây trình bày cách lấy giá trị tối đa cho các loại vùng chứa trong Python
import sys
print[sys.maxsize]
Trong trường hợp chúng ta cần lấy giá trị lớn nhất hoặc nhỏ nhất của số nguyên để sử dụng nó trong kiểm tra điều kiện, chúng ta có thể sử dụng float['inf']
và
import sys
print[sys.maxsize]
0 để lấy vô cực dương và âm trong Python Trong Python 3, kiểu dữ liệu int về cơ bản giống với kiểu long trong Python 2, vì vậy ý tưởng về số int tối đa sẽ hiệu quả. Python2 có hai kiểu số nguyên, int và long, nhưng Python3 chỉ có intPython chuyển liền mạch từ số nguyên đơn giản sang số nguyên dài khi bạn vượt qua giá trị này. Vì vậy, hầu hết thời gian, bạn sẽ không muốn biết điều đó
Python tối đa int
Không có khái niệm max int trong Python. Kiểu int không bị chặn trong Python3. Để kiểm tra kích thước từ của trình thông dịch hiện tại trong Python 3, hãy sử dụng sys. kích thước tối đa
Nếu bạn đang sử dụng thuộc tính của mô-đun sys, bạn cần nhập nó vào đầu tệp của mình
import sys
Bây giờ, bạn có thể sử dụng thuộc tính maxsize
import sys print[sys.maxsize]
đầu ra
9223372036854775807
Nó chính xác là 2^63 – 1, vì vậy bạn có một int 64-bit
Giá trị tối đa có thể biểu thị bằng một từ không dấu trong Python sẽ là sys. maxsize * 2 + 1 và số bit trong một từ sẽ là phép toán. log2[sys. kích thước tối đa * 2 + 2]
hệ thống. maxsize không phải là giá trị int tối đa có thể và nó có thể xử lý các giá trị lớn hơn khi bộ nhớ khả dụng
Trong Python, bạn có thể sử dụng sys.maxsize
từ mô-đun
import sys # Get the max integer value max_int = sys.maxsize print[f"The maximum integer value is {max_int}"]0 để lấy các giá trị số nguyên lớn nhất và nhỏ nhất
sys.maxsize
cung cấp cho bạn giá trị số nguyên tối đa và phiên bản âm của nó
import sys # Get the max integer value max_int = sys.maxsize print[f"The maximum integer value is {max_int}"]2 cung cấp cho bạn giá trị số nguyên tối thiểu________số 8_______
Lưu ý rằng Python 3. 0+ không giới hạn loại dữ liệu
import sys # Get the max integer value max_int = sys.maxsize print[f"The maximum integer value is {max_int}"]3 và không có giá trị tối đa/tối thiểu. Nhưng để có được giá trị số nguyên tối đa thực tế cho một từ số nguyên duy nhất trong hệ điều hành của bạn, hãy sử dụng
sys.maxsize
như hình trênHướng dẫn này dạy bạn cách lấy giá trị số nguyên tối đa và tối thiểu trong Python
Bạn sẽ hiểu tại sao các giá trị số nguyên lớn nhất và nhỏ nhất lại tồn tại ngay từ đầu. Bạn cũng sẽ tìm hiểu cách lấy các giá trị số nguyên tối đa/tối thiểu trong các phiên bản Python trước 3. 0 cũng như Python 3. 0+. Ngoài ra, bạn sẽ học cách lấy số nguyên tối đa/tối thiểu trong NumPy
Hãy nhảy vào nó
Giá trị số nguyên Extrema
Bộ nhớ máy tính có hạn. Một hệ điều hành điển hình sử dụng hệ thống 32 bit hoặc 64 bit để biểu diễn các số. Điều này có nghĩa là hệ thống có thể đại diện cho các số 2³² hoặc 2⁶⁴
Lưu ý rằng giới hạn kích thước số nguyên tối đa/tối thiểu không phải là thứ chỉ dành cho Python vì nó phụ thuộc vào khả năng của thiết bị chứ không phải ngôn ngữ lập trình
Chúng ta hãy xem xét kỹ hơn những gì giới hạn kích thước của một số nguyên nói chung
Tại sao lại có Tối đa/Tối thiểu cho Số nguyên?
Số nguyên tối đa là số tối đa mà cửa hàng nhị phân có thể chứa. Nhiều hệ điều hành sử dụng 32 bit để lưu trữ. Điều này có nghĩa là bạn phải khớp bất kỳ số nào bạn muốn sử dụng trong 32 bit đó
Một bit là một chữ số nhị phân có giá trị là 0 hoặc 1. Nếu bạn tạo một dòng các bit này, bạn có thể nhận được một số kết hợp khác nhau của 0 và 1
Ví dụ: nếu bạn có 2 bit, bạn có 2² = 4 kết hợp có thể
- 00
- 01
- 10
- 11
Và đối với N bit, bạn có 2^N kết hợp có thể
Một máy tính sử dụng 32 bit để biểu diễn các số có tổng số 2³² = 4.294.967.296 kết hợp có thể. Điều này có nghĩa là máy tính có thể biểu diễn tổng cộng 2³² số sao cho mỗi tổ hợp bit tương ứng với một số trong hệ thống số thập phân
Nhưng như bạn đã biết, bạn không chỉ có số dương mà còn có cả số âm và số không. Nhưng các bit không hiểu các dấu hiệu tiêu cực. Thay vào đó, máy tính có thể sử dụng 1 làm dấu âm và 0 làm dấu dương
Trong chuỗi 32 bit, điều này có nghĩa là dấu được biểu thị bằng bit ngoài cùng bên trái [1 cho giá trị âm, 0 cho giá trị dương]. Bởi vì một bit được sử dụng làm dấu, nên nó để lại 31 bit để biểu diễn các số thực
Điều này có nghĩa là số nguyên lớn nhất trong hệ thống 32 bit là 0 theo sau là 31 1. Nói cách khác, 2³⁰ + 2²⁹ + … + 2² + 2¹ + 2⁰. Đây là 2³¹ – 1 hoặc 2.147.483.647. Vì vậy, bạn có thể đếm từ 0 đến 2.147.483.647 bằng cách sử dụng loại hệ thống số nguyên có dấu 32 bit này
Khi nói đến giá trị âm, ý tưởng hoàn toàn giống nhau. Giá trị âm nhỏ nhất là 1 theo sau là 31 1, nghĩa là 2³⁰ + 2²⁹ + … + 2² + 2¹ + 2⁰. Là một giá trị âm, đây là -2,147,483,647. Nhưng hãy nhớ rằng, vì giá trị 0 đã được bao gồm trong phạm vi các số dương có thể đếm được, nên chúng tôi bắt đầu đếm các giá trị âm từ -1 thay vì 0. Điều này có nghĩa là giá trị âm nhỏ nhất có thể có trong hệ thống số nguyên có dấu 32 bit thực tế nhỏ hơn -2.147.483.647 một giá trị, tức là -2.147.483.648
Và nếu máy tính sử dụng 64 bit để lưu trữ số, thì ý tưởng cũng giống như vậy
Giá trị lớn nhất của số nguyên có dấu 64 bit là 2⁶³ – 1 = 9.223.372.036.854.775.807 và giá trị nhỏ nhất là -[2⁶³ – 1] – 1 = -9.223.372.036.854.775.808
Tóm lại, giá trị tối đa và tối thiểu cho số nguyên trong ngôn ngữ lập trình được xác định bởi dung lượng bộ nhớ được phân bổ để lưu trữ chúng và loại số nguyên đang được sử dụng. Các giá trị này rất quan trọng vì chúng xác định phạm vi giá trị mà một biến số nguyên có thể lưu trữ và chúng có thể ảnh hưởng đến độ chính xác và độ chính xác của các phép tính liên quan đến số nguyên
Giá trị số nguyên tối đa của Python
Để có được giá trị lớn nhất của kiểu dữ liệu số nguyên, hãy sử dụng hàm sys.maxsize
import sys # Get the max integer value max_int = sys.maxsize print[f"The maximum integer value is {max_int}"]
Giá trị số nguyên tối thiểu Python
Để có được giá trị nhỏ nhất của kiểu dữ liệu số nguyên, hãy sử dụng giá trị sys.maxsize
âm và trừ 1 từ giá trị đó để giải thích cho 0 nằm trong phạm vi giá trị dương
import sys # Get the min integer value min_int = -sys.maxsize - 1 print[f"The minimum integer value is {min_int}"]
Python 3+ Loại 'int' Không có giới hạn
Kể từ Python 3, kiểu int không bị ràng buộc. Điều này có nghĩa là không có giới hạn về mức độ lớn mà bạn có thể biểu diễn bằng cách sử dụng kiểu int
Quay lại các phiên bản Python sớm hơn 3. 0, kiểu int nhất định nằm trong khoảng [-2⁶³, 2⁶³ – 1]. Nếu bạn muốn sử dụng một số lớn hơn hoặc nhỏ hơn số trong phạm vi, bạn phải sử dụng kiểu dữ liệu
import sys # Get the max integer value max_int = sys.maxsize print[f"The maximum integer value is {max_int}"]7. Trên thực tế, việc chuyển đổi từ
import sys # Get the max integer value max_int = sys.maxsize print[f"The maximum integer value is {max_int}"]3 thành
import sys # Get the max integer value max_int = sys.maxsize print[f"The maximum integer value is {max_int}"]7 diễn ra tự động
Ví dụ: hãy thử in một số lượng lớn trong Python 2 trong đó kiểu int vẫn bị chặn
print[9223372036854775807] print[9223372036854775808]
đầu ra
9223372036854775807 9223372036854775808L
Lưu ý chữ 'L' ở cuối số thứ hai. Bởi vì
import sys # Get the min integer value min_int = -sys.maxsize - 1 print[f"The minimum integer value is {min_int}"]0 lớn hơn giá trị tối đa của
import sys # Get the max integer value max_int = sys.maxsize print[f"The maximum integer value is {max_int}"]3, nên nó tự động trở thành
import sys # Get the max integer value max_int = sys.maxsize print[f"The maximum integer value is {max_int}"]7 mà Python biểu thị bằng cách thêm 'L' vào cuối
Nhưng trong Python 3, kiểu int không bị chặn. Về cơ bản, những gì long trong Python 2 bây giờ là int trong Python 3+. Ngoài ra, chữ 'L' không còn được thêm vào cuối các số nguyên lớn
Hãy lặp lại ví dụ trước trong Python 3
print[9223372036854775807] print[9223372036854775808]
đầu ra
9223372036854775807 9223372036854775808
Mặc dù không có giới hạn về độ lớn của một số nguyên trong Python, nhưng sys.maxsize
cung cấp cho bạn giới hạn trên đối với các danh sách hoặc chuỗi thực tế. Giá trị tối đa hoạt động như một giá trị trọng điểm trong các thuật toán, vì vậy mặc dù nó không phải là giới hạn cứng trong số nguyên Python, nhưng nó cho biết kích thước từ tối đa được sử dụng để biểu thị số nguyên đằng sau hậu trường
Nếu điều này không hợp lý, hãy xem điều gì sẽ xảy ra nếu bạn cố gắng sử dụng một số nguyên lớn hơn sys.maxsize
để truy cập một phần tử danh sách
l = [1,2,3,4,5,6] value = l[10000000000000000000000000000000000]
đầu ra
Traceback [most recent call last]: File "", line 1, in IndexError: cannot fit 'int' into an index-sized integer
Lỗi nói rằng chỉ mục số nguyên bạn đang sử dụng để truy cập các thành phần danh sách quá lớn để trở thành một chỉ mục. Điều này xảy ra do những hạn chế của hệ điều hành của bạn. Chỉ mục Python vẫn phải là một số nguyên được giới hạn bởi giới hạn 32 bit hoặc 64 bit
Vì vậy, mặc dù
import sys # Get the max integer value max_int = sys.maxsize print[f"The maximum integer value is {max_int}"]3 không bị chặn trong Python, hệ điều hành cơ bản vẫn sử dụng 32 hoặc 64 bit để biểu thị các số