Câu hỏi Nếu máy 32 bit chỉ có thể xử lý các số lên đến 2 ^ 32, tại sao tôi có thể viết 1000000000000 (nghìn tỷ) mà không có máy của tôi bị lỗi?


Máy tính 32 bit chỉ có thể lưu trữ số nguyên đã ký tối đa 231 - 1.
Đây là lý do tại sao chúng tôi đã hết địa chỉ IPv4 và đã bước vào kỷ nguyên 64 bit.

Tuy nhiên, số 231 - 1 (2.147.483.647) không lớn bằng số 1 nghìn tỷ (1.000.000.000.000) mà tôi dường như có thể hiển thị tốt mà không có máy của tôi bị rơi.

Ai đó có thể giải thích tại sao điều này?


365


gốc


Câu hỏi là thiếu sót. Máy 32 bit có thể xử lý số lớn hơn 2 ^ 32. Họ làm tất cả các thời gian, với 'dài' và như vậy. Chúng chỉ có thể lưu trữ tới 2 ^ 32 trong một thanh ghi, nhưng phần mềm được viết để bỏ qua vấn đề này. Một số ngôn ngữ hiện đại thậm chí không có vấn đề với độ dài của một số đã cho. - JFA
Xin vui lòng giữ cho ý kiến ​​về chủ đề, lịch sự, và có liên quan đến các khía cạnh kỹ thuật của câu hỏi. Gần 50 ý kiến ​​trò đùa đã bị xóa và chúng tôi muốn tránh phải khóa bài đăng. Cảm ơn bạn. - nhinkle♦
Câu hỏi này được viết theo cách hơi cẩu thả. Bạn có ý gì khi "viết" và "hiển thị" số 1000000000000? Khi bạn viết câu hỏi bạn đã viết số 1000000000000, và trình duyệt web của bạn hiển thị nó chỉ là tốt, tôi giả định, nhưng điều này sẽ không có gì lạ đối với bất cứ ai đã từng sử dụng một máy tính trước đây. Câu hỏi yêu cầu giải thích miễn phí. - HelloGoodbye
Ý thức của con người được ước tính chứa khoảng 50 bit (tôi đọc ở đâu đó). Vì vậy, câu hỏi không phải là "Làm thế nào tôi có thể viết 10^9 mà không có máy tính của tôi bị rơi? "nhưng đúng hơn" Làm sao tôi có thể viết 10^(18) mà không có bộ não của tôi bị rơi? " - Hagen von Eitzen
Máy tính 32 bit chỉ có thể lưu trữ số nguyên UNSIGNED tối đa 2 ^ 32 - 1. 2 ^ 32 - 1 không bằng 2,147,483,647 ... 300 phiếu bầu và không ai nhận ra điều này? - Koray Tugay


Các câu trả lời:


Tôi trả lời câu hỏi của bạn bằng cách hỏi bạn một câu hỏi khác:

Làm thế nào để bạn đếm trên ngón tay của bạn đến 6?

Bạn có thể đếm đến số lượng lớn nhất có thể bằng một tay, và sau đó bạn chuyển sang bàn tay thứ hai khi bạn hết ngón tay. Máy tính cũng làm như vậy, nếu chúng cần đại diện cho một giá trị lớn hơn một thanh ghi đơn có thể giữ chúng sẽ sử dụng nhiều khối 32bit để làm việc với dữ liệu.


785



Hài hước, @codename. Làm thế nào sau đó bạn đếm trên ngón tay của bạn đến 32 hoặc nhiều hơn (tức là một khi 2 ^ 5 là kiệt sức)? ;) Sự tương tự của việc chuyển sang tay kia là tốt ... ngay cả khi nhị phân trì hoãn sự cần thiết phải di chuyển sang tay kia. Những gì tôi muốn xem đếm đến 1.024 hoặc nhiều hơn với độ khéo léo để di chuyển đến các ngón chân của một người để đếm tiếp trong nhị phân - lên tới 1.048.575! :) Đó là khả năng 20-bit của quyền lực của con gái. : P - J0e3gan
Xin vui lòng giữ ý kiến ​​về chủ đề và có liên quan để thảo luận về các khía cạnh kỹ thuật của câu trả lời này. Hơn 60 bình luận về trò đùa đã bị xóa khỏi câu trả lời này và chúng tôi muốn tránh phải khóa bài đăng. - nhinkle♦
@ codename- dễ dàng, bạn chỉ định một ngón tay làm con trỏ ngăn xếp. Khi bạn hết ngón tay, bạn thêm số tiền vào ngăn xếp và bắt đầu đếm lại. - Makach
Bạn đã học được điều đó ở đâu, @codename? Tôi nghe điều này đầu tiên từ Frederik Pohl, xem ví dụ đây hjkeen.net/halqn/f_pohl3.htm - Zane
Tôi nghĩ đây không phải là câu trả lời cho câu hỏi liên quan. Trả lời bởi @ Bigbio2002 là câu trả lời đúng. Ở đây "1000000000000" không phải là số mà là văn bản, giống như "adsfjhekgnoregrebgoregnkevnregj". Những gì bạn đang nói là đúng, nhưng tôi mạnh mẽ cảm thấy đây không phải là câu trả lời đúng. Và để thấy rất nhiều upvotes ... - Master Chief


Bạn đúng là số nguyên 32 bit không thể chứa giá trị lớn hơn 2 ^ 32-1. Tuy nhiên, giá trị của số nguyên 32 bit này và cách nó xuất hiện trên màn hình của bạn là hai thứ hoàn toàn khác nhau. Chuỗi in "1000000000000" không được biểu thị bằng số nguyên 32 bit trong bộ nhớ.

Để hiển thị nghĩa là số "1000000000000" yêu cầu 13 byte bộ nhớ. Mỗi byte riêng lẻ có thể chứa một giá trị lên đến 255. Không ai trong số họ có thể giữ toàn bộ, giá trị số, nhưng giải thích riêng lẻ dưới dạng ký tự ASCII (ví dụ, ký tự '0'được biểu thị bằng giá trị thập phân 48, giá trị nhị phân 00110000), chúng có thể được xâu thành chuỗi với nhau thành một định dạng có ý nghĩa đối với bạn, một con người.


Một khái niệm liên quan trong lập trình là typecasting, đó là cách một máy tính sẽ giải thích một luồng cụ thể của 0cát 1S. Như trong ví dụ trên, nó có thể được hiểu như là một giá trị số, một nhân vật, hoặc thậm chí một cái gì đó khác hoàn toàn. Mặc dù số nguyên 32 bit có thể không giữ được giá trị 1000000000000, nhưng số dấu phẩy động 32 bit sẽ có thể sử dụng cách diễn giải hoàn toàn khác.

Về cách các máy tính có thể làm việc và xử lý các số lớn trong nội bộ, có tồn tại các số nguyên 64 bit (có thể chứa các giá trị lên đến 16 tỷ tỷ), các giá trị dấu phẩy động, cũng như các thư viện chuyên dụng có thể hoạt động với tùy ý lớn số.


397



Trên thực tế đó là chủ yếu là chính xác nhưng không hoàn toàn. Một số điểm nổi 32 điểm không có khả năng thể hiện chính xác 1000000000000. Nó sẽ đại diện cho một số rất gần với số mong muốn nhưng không chính xác. - Tim B
@ TimB: Bạn đã nghe về định dạng số thập phân chưa? Đó là một phần của tiêu chuẩn IEEE 754-2008. Định dạng này có khả năng biểu diễn chính xác số này :) - V-X
Đúng, có thể. Tuy nhiên đó không phải là định dạng mọi người có nghĩa là khi họ nói "phao", mà thường đề cập đến một số điểm nổi 32 bit như được lưu trữ và được sử dụng bởi bộ xử lý điểm nổi tiêu chuẩn trong các máy tính hiện tại. - Tim B
@TimB thực sự. Số gần nhất với số có thể được biểu diễn dưới dạng float32 là 999999995904 - greggo
@ TimB: Nhưng một số dấu phẩy động 64 bit có thể dễ dàng biểu diễn 1000000000000 chính xác. Đó là 10 ^ 12, hoặc 2 ^ 12 * 5 ^ 12; 5 ^ 12 đòi hỏi 28 bit của mantissa. - Keith Thompson


Đầu tiên và quan trọng nhất, máy tính 32 bit có thể lưu trữ số lên đến 2³²-1 trong một từ máy duy nhất. Từ máy là số lượng dữ liệu mà CPU có thể xử lý theo cách tự nhiên (nghĩa là các thao tác trên dữ liệu có kích thước đó được thực hiện trong phần cứng và thường là nhanh nhất để thực hiện). CPU 32 bit sử dụng các từ gồm 32 bit, do đó chúng có thể lưu trữ số từ 0 đến 2³²-1 trong một từ.

Thứ hai, 1 nghìn tỷ và 1000000000000 là hai thứ khác nhau.

  • 1 nghìn tỷ là một khái niệm trừu tượng về số
  • 1000000000000 là văn bản

Bằng cách nhấn 1 một lần và sau đó 0 12 lần bạn đang nhập văn bản. 1 đầu vào 1, 0 đầu vào 0. Xem? Bạn đang nhập các ký tự. Ký tự không phải là số. Máy đánh chữ không có CPU hoặc bộ nhớ nào cả và chúng đã xử lý những "số" này khá tốt, bởi vì nó chỉ là văn bản.

Chứng minh rằng 1000000000000 không phải là một số, nhưng là văn bản: nó có thể có nghĩa là 1 nghìn tỷ (theo số thập phân), 4096 (theo hệ nhị phân) hoặc 281474976710656 (trong hệ thập lục phân). Nó có ý nghĩa nhiều hơn trong các hệ thống khác nhau. Ý nghĩa của 1000000000000 là một số và lưu trữ nó là một câu chuyện khác (chúng ta sẽ quay lại với nó trong giây lát).

Để lưu trữ văn bản (trong chương trình, nó được gọi là chuỗi) 1000000000000 bạn cần 14 byte (một cho mỗi ký tự cộng với một byte NULL kết thúc mà về cơ bản có nghĩa là "chuỗi kết thúc ở đây"). Đó là 4 từ máy. 3 và một nửa là đủ, nhưng như tôi đã nói, hoạt động trên các từ máy là nhanh nhất. Hãy giả sử ASCII được sử dụng để lưu trữ văn bản, vì vậy trong bộ nhớ nó sẽ trông như thế này: (chuyển đổi mã ASCII tương ứng với 0 và 1 thành nhị phân, mỗi từ trong một dòng riêng biệt)

00110001 00110000 00110000 00110000
00110000 00110000 00110000 00110000
00110000 00110000 00110000 00110000
00110000 00000000 00000000 00000000

Bốn ký tự vừa với một từ, phần còn lại được chuyển sang chữ cái tiếp theo. Phần còn lại được chuyển sang từ tiếp theo cho đến khi mọi thứ (bao gồm cả byte NULL đầu tiên) phù hợp.

Bây giờ, quay lại lưu trữ số. Nó hoạt động giống như với văn bản tràn, nhưng chúng được trang bị từ phải sang trái. Nghe có vẻ phức tạp, đây là một ví dụ. Để đơn giản, hãy giả sử rằng:

  • máy tính ảo của chúng tôi sử dụng số thập phân thay vì nhị phân
  • một byte có thể giữ số 0..9
  • một từ gồm hai byte

Đây là bộ nhớ 2 từ trống:

0 0
0 0

Hãy lưu trữ số 4:

0 4
0 0

Bây giờ hãy thêm 9:

1 3
0 0

Lưu ý rằng cả hai toán hạng sẽ phù hợp với một byte, nhưng không phải là kết quả. Nhưng chúng tôi có một cái khác sẵn sàng để sử dụng. Bây giờ hãy lưu trữ 99:

9 9
0 0

Một lần nữa, chúng tôi đã sử dụng byte thứ hai để lưu trữ số. Hãy thêm 1:

0 0
0 0

Rất tiếc ... Đó được gọi là tràn số nguyên và là nguyên nhân của nhiều vấn đề nghiêm trọng, đôi khi những cái rất đắt.

Nhưng nếu chúng ta mong đợi rằng tràn sẽ xảy ra, chúng ta có thể làm điều này:

0 0
9 9

Và bây giờ thêm 1:

0 1
0 0

Nó trở nên rõ ràng hơn nếu bạn loại bỏ các dấu cách và dòng mới của byte:

0099    | +1
0100

Chúng tôi đã dự đoán rằng tràn có thể xảy ra và chúng tôi có thể cần thêm bộ nhớ. Xử lý các con số theo cách này không nhanh bằng các con số phù hợp với từng từ và nó phải được thực hiện trong phần mềm. Thêm hỗ trợ cho hai-32-bit-word-số cho một CPU 32-bit có hiệu quả làm cho nó một CPU 64-bit (bây giờ nó có thể hoạt động trên 64-bit số nguyên bản, phải không?).

Tất cả mọi thứ tôi đã mô tả ở trên áp dụng cho bộ nhớ nhị phân với 8-bit byte và 4-byte từ quá, nó hoạt động khá nhiều theo cùng một cách:

00000000 00000000 00000000 00000000 11111111 11111111 11111111 11111111    | +1
00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000000

Tuy nhiên, việc chuyển đổi các số đó thành hệ thập phân là khó khăn. (Nhưng nó hoạt động khá tốt với hệ thập lục phân)


189



Câu trả lời của bạn đọc khá nghiêm túc. OP rõ ràng đang nói về con số, không phải là văn bản: large as the number 1 trillion (1000000000000). Ngoài ra, bạn gần như đang nói về Số học chính xác tùy ý, nhưng bạn không bao giờ thực sự đề cập đến bất kỳ điều khoản nào cho những gì bạn đang nói .... - MirroredFate
"1 nghìn tỷ" cũng là một chuỗi - Elzo Valugi
@ElzoValugi Nó là. Tôi đã phải tìm một số cách để trình bày khái niệm về số trừu tượng, trái ngược với chuỗi đại diện cho một số. Tôi tin rằng "1 nghìn tỷ" là một cách tốt hơn và ít mơ hồ hơn để làm điều đó (xem bằng chứng trong câu trả lời). - gronostaj
@MirroredFate Tôi không đồng ý với 'rõ ràng đang nói về con số'. OP nói 'hiển thị tốt', rõ ràng Là nói về văn bản '1000000000000' với tôi ... - Joe
@yannbane 'A' là một nhân vật và không phải là một con số. '?' là một nhân vật chứ không phải là một con số. '1' là một nhân vật và không phải là một số quá. Nhân vật chỉ là biểu tượng. Chúng có thể đại diện cho chữ số hoặc số, nhưng chắc chắn chúng không phải là số. '1' có thể đứng một, mười, hàng trăm, v.v., nó chỉ là một biểu tượng viết tắt của một chữ số có thể là một số hoặc một phần của nó. '10' (chuỗi ký tự) có thể có nghĩa là hai hoặc tám hoặc mười hoặc mười sáu vv nhưng khi bạn nói bạn có mười quả táo, bạn đang sử dụng số mười và mọi người đều biết ý bạn là gì. Có một sự khác biệt rất lớn giữa các nhân vật và số. - gronostaj


Bạn cũng có thể viết "BÁO CÁO NÀY LÀ BẤT HỢP" mà không có sự cố máy tính của bạn :) @ Câu trả lời của Scott là điểm cho một số khung tính toán nhất định, nhưng câu hỏi của bạn về "viết" một số lượng lớn ngụ ý rằng nó chỉ là văn bản thuần túy, ít nhất là cho đến khi nó được giải thích.

Chỉnh sửa: bây giờ với ít mỉa mai thông tin hữu ích hơn theo nhiều cách khác nhau con số có thể được lưu trữ trong bộ nhớ. Tôi sẽ mô tả những trừu tượng cao hơn tức là về một lập trình viên hiện đại có thể viết mã trước khi nó được dịch sang mã máy để thực thi.

Dữ liệu trên máy tính phải được giới hạn ở một số kiểuvà định nghĩa máy tính của loại đó mô tả những hoạt động nào có thể được thực hiện trên dữ liệu này và cách (ví dụ: so sánh các số, nối văn bản hoặc XOR một boolean). Bạn không thể chỉ cần thêm văn bản vào một số, giống như bạn không thể nhân một số bằng văn bản để một số giá trị này có thể được chuyển đổi giữa các loại.

Hãy bắt đầu với số nguyên không dấu. Trong các kiểu giá trị này, tất cả các bit được sử dụng để lưu trữ thông tin về các chữ số; của bạn là một ví dụ về Số nguyên không dấu 32 bit nơi có giá trị từ 0 đến 2^32-1 có thể được lưu trữ. Và có, tùy thuộc vào ngôn ngữ hoặc kiến ​​trúc của nền tảng được sử dụng, bạn có thể có số nguyên 16 bit hoặc số nguyên 256 bit.

Nếu bạn muốn bị tiêu cực thì sao? Trực giác, số nguyên đã ký là tên của trò chơi. Công ước là phân bổ tất cả các giá trị từ -2^(n-1) đến 2^(n-1)-1 - bằng cách này, chúng ta tránh nhầm lẫn phải đối phó với hai cách để viết +0 và -0. Vì vậy, một số nguyên có dấu 32 bit sẽ giữ một giá trị từ -2147483648 đến 2147483647. Gọn gàng, phải không?

Ok, chúng tôi đã bao gồm các số nguyên là các số không có thành phần thập phân. Bày tỏ những điều này phức tạp hơn: phần không nguyên có thể chỉ ở một nơi nào đó giữa 0 và 1, do đó, mỗi bit phụ được sử dụng để mô tả nó sẽ làm tăng độ chính xác của nó: 1/2, 1/4, 1/8 ... Vấn đề là, bạn không thể thể hiện chính xác một số thập phân đơn giản 0.1 như một tổng các phân số chỉ có thể có hai lũy thừa trong mẫu số của chúng! Nó sẽ không dễ dàng hơn nhiều để lưu trữ số như một số nguyên, nhưng đồng ý để đặt điểm radix (thập phân) thay vào đó? Cái này được gọi là điểm cố định số, nơi chúng tôi lưu trữ 1234100 nhưng đồng ý về một quy ước để đọc nó như 1234.100 thay thế.

Một loại tương đối phổ biến hơn được sử dụng để tính toán là floating point. Cách nó hoạt động thực sự gọn gàng, nó sử dụng một chút để lưu trữ giá trị dấu hiệu, sau đó một số để lưu trữ số mũ và significand. Có những tiêu chuẩn xác định phân bổ như vậy, nhưng đối với một Phao 32 bit số lượng tối đa bạn có thể lưu trữ là áp đảo

(2 - 2^-23) * 2^(2^7 - 1) ≈ 3.4 * 10^38

Tuy nhiên điều này đi kèm với chi phí chính xác. JavaScript có sẵn trong các trình duyệt sử dụng các phao 64 bit, và nó vẫn không thể có được những điều đúng. Chỉ cần sao chép vào thanh địa chỉ và nhấn enter. Cảnh báo spoiler: kết quả là không phải sắp sửa 0.3.

javascript:alert(0.1+0.2);

Có nhiều loại thay thế khác như Microsoft .NET 4.5's BigInteger, về mặt lý thuyết không có giới hạn trên hoặc dưới và phải được tính theo "lô"; nhưng có lẽ những công nghệ hấp dẫn hơn là những công nghệ hiểu không toán học, như động cơ Wolfram Mathematica, có thể hoạt động chính xác với các giá trị trừu tượng như vô cực.


40



Bạn có thể làm điều đó trong điều này thực tế. Hãy thử làm điều đó trong vũ trụ Star Trek. Chỉ cần đứng trước, bởi vì tất cả các tia lửa và khói. - Michael Petrotta
Đó không phải là cách điểm cố định hoạt động. Nó thực sự là một hệ thống mà các con số được chia tỷ lệ và thiên vị để tạo ra dấu thập phân. Trong ví dụ của bạn tỷ lệ là 1/1000, nhưng cũng có số điểm cố định (đặc biệt là trong đồ họa máy tính) như thế này: 0 = 0.0, 255 = 1.0 - tỷ lệ là 1/255. - Andon M. Coleman


Điều quan trọng là hiểu cách máy tính mã hóa số.

Đúng, nếu máy tính nhấn mạnh vào việc lưu trữ số bằng cách sử dụng biểu diễn nhị phân đơn giản của số sử dụng một từ (4 byte trên hệ thống 32 bit), thì máy tính 32 bit chỉ có thể lưu trữ số lên tới 2 ^ 32. Nhưng có rất nhiều cách khác để mã hóa số tùy thuộc vào những gì bạn muốn đạt được với chúng.

Một ví dụ là làm thế nào máy tính lưu trữ số dấu chấm động. Máy tính có thể sử dụng toàn bộ các cách khác nhau để mã hóa chúng. Chuẩn mực IEEE 754 xác định các quy tắc cho số mã hóa lớn hơn 2 ^ 32. Crudely, máy tính có thể thực hiện điều này bằng cách chia 32 bit thành các phần khác nhau đại diện cho một số chữ số và số bit khác đại diện cho kích thước của số (tức là số mũ, 10 ^ x). Điều này cho phép lớn hơn nhiều phạm vi của các số trong các thuật ngữ kích thước, nhưng thỏa hiệp độ chính xác (điều này là tốt cho nhiều mục đích). Tất nhiên máy tính cũng có thể sử dụng nhiều hơn một từ cho mã hóa này làm tăng độ chính xác về độ lớn của các số được mã hóa sẵn có. Phiên bản 32 thập phân đơn giản của chuẩn IEEE cho phép các số có khoảng 7 chữ số thập phân có độ chính xác và số lượng lên tới khoảng 10 ^ 96 độ lớn.

Nhưng có nhiều tùy chọn khác nếu bạn cần độ chính xác cao hơn. Rõ ràng bạn có thể sử dụng nhiều từ trong mã hóa của bạn mà không có giới hạn (mặc dù với một hình phạt hiệu suất để chuyển đổi vào và ra khỏi định dạng được mã hóa). Nếu bạn muốn khám phá một cách, điều này có thể được thực hiện, có một add-in mã nguồn mở tuyệt vời cho Excel sử dụng một lược đồ mã hóa cho phép hàng trăm chữ số chính xác trong tính toán. Bổ trợ được gọi là Xnumbers và có sẵn đây. Mã trong Visual Basic không phải là nhanh nhất có thể nhưng có lợi thế là nó dễ hiểu và dễ sửa đổi. Đó là một cách tuyệt vời để tìm hiểu cách máy tính đạt được mã hóa số dài hơn. Và bạn có thể chơi xung quanh với kết quả trong Excel mà không phải cài đặt bất kỳ công cụ lập trình nào.


31





Đó là tất cả trong câu hỏi của bạn.

Bạn có thể viết bất kỳ số nào bạn thích trên giấy. Hãy thử viết một nghìn tỷ chấm trên một tờ giấy trắng. Nó chậm và không hiệu quả. Đó là lý do tại sao chúng tôi có một hệ thống 10 chữ số để đại diện cho những con số lớn đó. Chúng tôi thậm chí còn có tên cho những con số lớn như "triệu", "nghìn tỷ" và nhiều hơn nữa, vì vậy bạn không nói one one one one one one one one one one one... thành tiếng.

Bộ xử lý 32 bit được thiết kế để hoạt động nhanh nhất và hiệu quả với các khối bộ nhớ chính xác là 32 chữ số nhị phân. Nhưng chúng tôi, mọi người, thường sử dụng hệ thống số gồm 10 chữ số và máy tính, là điện tử, sử dụng hệ thống 2 chữ số (nhị phân). Số 32 và 64 chỉ xảy ra là quyền hạn của 2. Vì vậy, một triệu và một nghìn tỷ là quyền hạn của 10. Nó dễ dàng hơn cho chúng tôi để hoạt động với những con số hơn so với multitudes của 65536, ví dụ.

Chúng tôi chia các số lớn thành các chữ số khi viết chúng trên giấy. Máy tính chia nhỏ số thành số lượng chữ số lớn hơn. Chúng tôi có thể viết ra bất kỳ số nào chúng tôi thích, và do đó có thể các máy tính nếu chúng tôi thiết kế chúng như vậy.


24





32bit và 64bit tham chiếu đến địa chỉ bộ nhớ. Bộ nhớ máy tính của bạn giống như các hộp thư bưu điện, mỗi hộp có một địa chỉ khác nhau. CPU (Bộ xử lý trung tâm) sử dụng các địa chỉ này để giải quyết các vị trí bộ nhớ trên RAM của bạn (Bộ nhớ truy cập ngẫu nhiên). Khi CPU chỉ có thể xử lý các địa chỉ 16bit, bạn chỉ có thể sử dụng 32MB RAM (có vẻ như rất lớn vào thời điểm đó). Với 32bit nó đã đi đến 4 + gb (mà dường như rất lớn vào thời điểm đó). Bây giờ chúng ta có 64bit địa chỉ RAM đi vào terabyte (có vẻ rất lớn).
Tuy nhiên, chương trình có thể phân bổ nhiều khối bộ nhớ cho những thứ như lưu trữ số và văn bản, điều đó tùy thuộc vào chương trình và không liên quan đến kích thước của từng địa chỉ. Vì vậy, một chương trình có thể nói cho CPU, tôi sẽ sử dụng 10 khối địa chỉ lưu trữ và sau đó lưu trữ một số rất lớn, hoặc một chuỗi 10 chữ cái hoặc bất cứ điều gì.
Lưu ý phụ: Địa chỉ bộ nhớ được trỏ đến bởi "con trỏ", vì vậy giá trị 32 và 64 bit có nghĩa là kích thước của con trỏ được sử dụng để truy cập bộ nhớ.



15



Câu trả lời hay, ngoại trừ chi tiết - 16bits không gian địa chỉ cung cấp cho bạn 64kb, không phải 32mb và các máy như 286 có địa chỉ 24 bit (cho 16mb). Ngoài ra, với địa chỉ 64 bit, bạn cũng vượt quá terabyte - nhiều hơn 16 exabyte - terabyte là xung quanh loại giới hạn bo mạch chủ / CPU của thế hệ hiện tại đang áp đặt - không phải là kích thước của địa chỉ. - Phil
32 bit đề cập đến kích thước từ máy, không phải địa chỉ bộ nhớ. Như Phil đã đề cập, 286 là CPU 16 bit nhưng đã sử dụng 24 bit để xử lý thông qua phân đoạn bộ nhớ. CPU x86 là 32 bit, nhưng sử dụng địa chỉ 36 bit. Xem PAE. - gronostaj
@gronostaj well x86 có địa chỉ 32 bit từ 386 đến Pentium. - Ruslan
Upvote vì đây là câu trả lời duy nhất ở đây - 32bit đề cập đến địa chỉ bộ nhớ 32 bit, không phải là số học 32 bit. - user1207217
@ user1207217: ?? Vì vậy, theo lý do của bạn ví dụ như Z80 hoặc 8080 là bộ xử lý 16 bit (vì bộ nhớ địa chỉ bộ nhớ 16 bit và bus bộ nhớ)? - pabouk