Sức mạnh của hai bit trên mỗi từ có thuận tiện không? Nếu có, tại sao vậy?


11

Tôi tìm thấy một số nguồn cho rằng sức mạnh của hai bit trong một từ nhị phân (chẳng hạn như 8 bit trên mỗi byte) là "điều tốt" hoặc "thuận tiện". Tôi tìm thấy không có nguồn chỉ ra tại sao.

Từ lịch sử tại sao byte là tám bit? chúng tôi đọc trong câu trả lời đã được phê duyệt:

Máy tính nhị phân thúc đẩy các nhà thiết kế tạo ra sức mạnh kích thước của hai.

Được rôi nhưng tại sao? Trong cùng một câu hỏi nhưng trong lĩnh vực bình luận cho câu hỏi tôi tìm thấy:

Là câu cuối cùng trong trò hề? Một byte 12 bit sẽ bất tiện vì nó không phải là sức mạnh của 2. - robjb

Một lần nữa, khoảng trống của lý do ...

tính toán địa chỉ là một công việc đơn giản hơn rất nhiều với lũy thừa 2 và được tính khi bạn tạo ra logic từ các bóng bán dẫn thô trong các lon nhỏ - Mike

Vì byte là đơn vị địa chỉ nhỏ nhất, điều này không có nhiều ý nghĩa. Rất nhiều upvote trên bình luận mặc dù. Có lẽ tôi đã bỏ lỡ điều gì đó.

Từ Wikipedia :

Tiêu chuẩn thực tế gồm tám bit là sức mạnh thuận tiện của hai cho phép các giá trị 0 đến 255 cho một byte

Và điều này sẽ thuận tiện vì ...?

Để làm rõ, đây là về số lượng bit trên mỗi byte (ví dụ 8 hoặc 6, v.v.), không phải số lượng giá trị trên mỗi byte (ví dụ: 2 8 hoặc 2 6 , v.v.). Vì sự nhầm lẫn tôi cũng chỉ ra đây không phải là về kích thước Word.

Tôi không quá quan tâm đến lý do lịch sử. Những người đã được giải thích tốt ở nơi khác (xem liên kết).


Câu hỏi liên quan trên SO: /programming/1606827/why-is-number-of-bits-always-a-power-of-two


2
@gnat Tôi khá chắc chắn rằng chúng ta đang nói về số bit trên mỗi byte (tức là 8 trong một byte 8 bit) ở đây, chứ không phải số lượng giá trị mà một byte có thể biểu thị (tức là 2 ^ 8 trong một byte 8 bit). Vì vậy, nếu bạn có, ví dụ, một byte 6 bit, 6 không phải là lũy thừa của hai , nhưng vâng, một byte 6 bit có thể biểu thị sức mạnh của hai số giá trị.
8bittree

2
@ 8bittree Tôi nghĩ rằng tôi đã nhận nó, cảm ơn vì đã giải thích! (rút lại phiếu bầu trùng lặp - mặc dù tôi nghĩ sẽ dễ dàng hơn cho độc giả nếu một lời giải thích như trong bình luận cuối cùng của bạn sẽ được chỉnh sửa thành câu hỏi, điều này có vẻ khá tinh tế)
gnat

2
Câu hỏi tương tự trên SO: stackoverflow.com/q/1606827/3723423 - câu trả lời mang một số lý lẽ chính đáng về sự tiện lợi
Christophe

2
@Snowman: Bài đăng của OP chứa một lời ngụy biện "cầu xin câu hỏi": "Tại sao quyền hạn của hai kích thước byte được coi là thuận tiện?" Họ không. Nó không có gì để làm với sức mạnh của hai; ông đọc sai câu trong bài viết Wikipedia.
Robert Harvey

3
@RobertHarvey Trong câu trả lời cho "lịch sử tại sao byte là tám bit là gì?" (cũng được liên kết trong câu hỏi của tôi) có câu sau: "Máy tính nhị phân thúc đẩy các nhà thiết kế tạo ra sức mạnh kích thước của hai." Có phải tôi cũng đã đọc sai điều này? Ý kiến ​​của cả hai nguồn là gì? Chỉ cần nói "bạn đã hiểu sai" không thực sự làm điều đó cho tôi.
Andreas

Câu trả lời:


10

Tôi không nghĩ các byte 8 bit đã thành công vì chúng có độ rộng bằng hai. Nếu bạn không muốn giải quyết các bit riêng lẻ - và đó là một tính năng phổ biến hiện tại cũng không phải trong quá khứ - có sức mạnh hai thì không có tầm quan trọng thực tế thực sự (chỉ là - bây giờ còn hơn cả quá khứ khi bỏ qua một số thành phần riêng biệt rất quan trọng - một phản xạ cho các kỹ sư phần cứng và phần mềm và ở lại vùng đất quen thuộc rất quan trọng cho các mục đích khác), và tôi không nhớ đã thấy đề cập đến trong lịch sử đọc máy tính của mình (1). Một trường hợp cần thiết thấp hơn, điều đó có nghĩa là một cái gì đó nhiều hơn các bộ ký tự 6 bit chiếm ưu thế. ASCII là 7 bit, nhưng ASCII sau đó hoàn toàn là để trao đổi giữa các bên (và do đó được dịch sang mã nội bộ để xử lý), và do đó

Subcommmitee nhận ra rằng nhà sản xuất máy tính khó có thể thiết kế các máy tính sử dụng mã 7 bit bên trong. Họ có nhiều khả năng sử dụng mã 4 bit, 6 bit và 8 bit. Hiện tại không có nhu cầu rộng rãi để trao đổi hơn 128 ký tự riêng biệt và khác biệt giữa các máy tính và giữa các máy tính với thiết bị đầu vào / đầu ra liên quan. [băng giấy, có kích thước khung hình tự nhiên là 8 bit nhưng cần tính chẵn lẻ nên tải trọng của khung là 7 bit cũng được trích dẫn để ủng hộ char 7 bit cho ASCII, sức mạnh của hai không được trích dẫn trong số các ưu điểm của 8 bit (2)

và đối với phần cứng 8 bit byte giành được vì nó cho phép đóng gói 2 chữ số thập phân trong một byte tại một thời điểm khi 75% dữ liệu là số và được biểu thị bằng BCD (3).

(1) ví dụ Blaauw và Brooks, Kiến trúc máy tính ; MacKenzie, Bộ ký tự được mã hóa, Lịch sử và Phát triển có cả một cuộc thảo luận về chủ đề đó.

(3) Tài liệu của X3.2 - Tiểu ban chịu trách nhiệm về ASCII - được trích dẫn bởi MacKenzie.

(3) MacKenzie, một lần nữa.


1
Cảm ơn bạn. Câu trả lời của bạn là tại chỗ và bạn đã mang tài liệu tham khảo. Bạn có phiếu bầu của tôi. Tôi nhận ra mặc dù nếu những gì bạn nói là đúng thì cũng không thể chứng minh được. Cant có thể chứng minh sự không tồn tại của một cái gì đó. Tôi đoán tôi nên thực sự xen vào những người tuyên bố "sự tiện lợi" và kiểm tra nguồn của họ. Có lẽ nó chỉ là một tin đồn lan rộng.
Andreas

Yếu tố thuận tiện khác là một byte có thể được biểu diễn dễ dàng dưới dạng hai giá trị thập lục phân. Đặt hai số thập phân được mã hóa nhị phân (BCD) trong một byte thường được gọi là số thập phân đóng gói. Điều này thực sự được coi là thuận tiện vì số thập phân có thể được đọc dưới dạng thập phân khi dữ liệu được hiển thị ở dạng hex.
JimmyJames

12 byte có thể được biểu diễn dễ dàng dưới dạng ba giá trị thập lục phân. Và bạn có thể lưu trữ ba số BCD trong một byte 12 bit. Chắc chắn điều đó tốt hơn rất nhiều so với hai giá trị thập lục phân và hai số BCD. Trên thực tế, một byte 10 bit có thể chứa ba chữ số thập phân. Và tôi nghĩ đó là cách tiêu chuẩn dấu phẩy động thập phân của IEEE hoạt động.
gnasher729

1
@JimmyJames, tôi nghĩ rằng bạn có được quan hệ nhân quả đảo ngược với thập lục phân. Hệ thập lục phân trở nên phổ biến vì đây là cách nhỏ gọn để biểu thị byte 8 bit, trước đó bát phân đã phổ biến hơn nhiều (và nó phổ biến hơn trên một máy như PDP-11 có byte 8 bit nhưng trong đó trường 3 bit là đáng kể trong tập lệnh mã hóa).
Lập trình viên

@ gnasher729, byte 8 bit là con của thập niên 60. Đi từ char 6 bit đến char 12 bit là điều không tưởng trong thập niên 60. Ngay cả ngày nay khi UTF-8 ít bị ràng buộc hơn rất phổ biến vì UTF-16 được coi là quá lãng phí. Một byte 10 bit là không thể tưởng tượng được và mã hóa 10 bit trên 3 chữ số thập phân cũng hoàn toàn không thực tế khi bạn đang kiểm tra các giá trị trong các thanh ghi và trong bộ nhớ với bảng điều khiển phía trước mà không nói về tác động đối với việc triển khai với công nghệ thời đó.
Lập trình viên

2

Khác với tai nạn lịch sử, không có lý do cụ thể tại sao chúng ta nên sử dụng 8/16/32/64 bit. Tôi cho rằng 12/24/48/96 bit sẽ thực sự hữu ích hơn.

Để xử lý văn bản, Unicode sử dụng UTF-24 giả định sẽ rẻ hơn UTF32; UTF-12 giả định sẽ lưu trữ tất cả các ký tự UTF-8 byte đơn và kép trong 12 bit, và tất cả các ký tự UTF-8 byte ba và bốn byte trong 24 bit (phạm vi sẽ giảm xuống còn 2 ^ 20 ký tự, nhưng vẫn còn bốn lần nhiều hơn là được sử dụng rộng rãi); mã sẽ đơn giản hơn vì chỉ có hai biến thể.

Đối với điểm nổi, 48 bit thường là đủ. 96 bit tốt hơn đáng kể so với mở rộng 80 bit. 24 bit rất hữu ích cho đồ họa; hữu ích hơn nhiều so với 16 bit được hỗ trợ bởi một số card đồ họa. Con trỏ 48 bit có thể xử lý 256 terabyte.

Về nhược điểm duy nhất là mảng bit, trong đó phép chia cho 12 là cần tính các vị trí byte. Nếu điều đó cảm thấy là quan trọng, tôi chắc chắn việc chia cho 12 có thể được triển khai khá hiệu quả trong phần cứng.


Điểm thú vị về UTF, mặc dù hơi lạc đề. Kích thước byte dấu phẩy động (hoặc bit) là một trận chiến vô tận giữa bộ nhớ và độ chính xác, nơi bạn chỉ cần sống với cái này hoặc cái kia. Điểm tốt về mảng bit quá.
Andreas

1
Suy nghĩ thú vị, nhưng tôi không chắc điều này trả lời câu hỏi.

1
Câu hỏi là: "Tại sao tám bit được coi là thuận tiện". Chắc chắn nói "không phải" trả lời câu hỏi.
gnasher729

1
@ gnasher729 Câu hỏi là: "Tại sao sức mạnh của hai bit trên mỗi byte được coi là thuận tiện", mặc dù câu trả lời của bạn dường như cũng được áp dụng.
8bittree

2
Bình luận không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được chuyển sang trò chuyện .
yannis

2

Điều này thuận tiện do các kiến ​​trúc phần cứng phổ biến sử dụng bội số của 8, ví dụ kiến ​​trúc 32 bit và 64 bit. Điều này có nghĩa là hiệu quả cao hơn khi sử dụng lưu trữ và truyền dữ liệu 8 bit.

"Tuy nhiên, các cân nhắc về kinh tế trong thiết kế thúc đẩy mạnh mẽ cho một kích thước, hoặc rất ít kích thước liên quan đến bội số hoặc phân số (tiểu phần) đến kích thước chính. Kích thước ưa thích đó trở thành kích thước từ của kiến ​​trúc."

Word (kiến trúc máy tính)

Xem thêm: Lịch sử tại sao byte là tám bit?


5
Tôi sẽ không chấp nhận điều này như một câu trả lời. Câu hỏi của tôi là tại sao power-of-hai là thuận tiện, chứ không phải tại sao chuẩn defacto là 8-bit. Và lịch sử đằng sau 8 bit đề cập đến 5, 6 và 7 bit được sử dụng vì lý do thực sự, trong khi đi từ 7 đến 8 được thúc đẩy với một "meh, tại sao không". Tôi có cảm giác đọc các nguồn khác nhau có sức mạnh lớn hơn khả năng tương thích với các hệ thống hiện tại. (Trong thực tế, 8 bit cho ký tự 7 bit đặt chẵn lẻ.) Word là một điều khác biệt khi tôi nhận được lợi ích của kích thước sức mạnh hai, tức là có thể sử dụng dịch chuyển thay vì tính toán nhiều.
Andreas

3
@RobertHarvey Câu hỏi này không phải là về số lượng trạng thái trên mỗi chuyển đổi (tức là nhị phân so với nhị phân trở lên), đó là về số lượng chuyển đổi để nhóm lại với nhau. Xem chỉnh sửa của tôi cho câu hỏi.
8bittree

2
Đối với chỉnh sửa của bạn, không có sự phân biệt có ý nghĩa giữa số bit trên mỗi byte và số giá trị trên mỗi byte. Đó là hai cách để thể hiện cùng một điều. Số lượng giá trị mà một byte có thể giữ theo sau trực tiếp từ số bit mà nó chứa: một byte có 8 bit và do đó, nó có thể giữ các giá trị lên đến 2⁸-1.
Robert Harvey

2
Theo logic, nó theo sau rằng bạn chọn một kích thước cho byte có thể chứa một phạm vi số thuận tiện. ASCII là 7 bit vì cung cấp 128 giá trị khác nhau, đủ để mã hóa cả hai trường hợp của bảng chữ cái La Mã, ký tự số, dấu chấm câu, ký tự điều khiển và một số ký tự đặc biệt. Một byte có thể chứa 7 bit ASCII và một bit chẵn lẻ để kiểm tra lỗi, với tổng số 8 bit, phù hợp với một loại teletype. Chúng tôi đã sử dụng kích thước đó cho một byte kể từ đó.
Robert Harvey

2
@JeremyKato Các thiết bị tôi đã đề cập đã cũ hơn (phần lớn thập niên 60-80), có lẽ là lý do tại sao bạn không quen thuộc với chúng. ASCII, thực sự là một mã hóa 7 bit (tính chẵn lẻ không phải là một phần của tiêu chuẩn). Nhưng đối với phần chính của bình luận của bạn, không, tôi không thiếu thứ gì. Tôi hiểu có nhiều lý do tại sao 8 bit cụ thể là thuận tiện, điều bạn và Robert Harvey đang thiếu là câu hỏi đang hỏi về sức mạnh của 2 bit nói chung , chứ không phải cụ thể là 8 bit.
8bittree

1

Theo bài viết trên Wikipedia cho từ này, điều này làm cho các tính toán liên quan đến giải quyết bộ nhớ dễ dàng hơn đáng kể:

Lượng bộ nhớ khác nhau được sử dụng để lưu trữ các giá trị dữ liệu với mức độ chính xác khác nhau. Các kích thước thường được sử dụng thường là sức mạnh của hai bội số của đơn vị độ phân giải địa chỉ (byte hoặc từ). Chuyển đổi chỉ mục của một mục trong một mảng thành địa chỉ của mục sau đó chỉ yêu cầu một thao tác thay vì nhân. Trong một số trường hợp mối quan hệ này cũng có thể tránh việc sử dụng các hoạt động phân chia. Kết quả là, hầu hết các thiết kế máy tính hiện đại đều có kích thước từ (và các kích thước toán hạng khác) có sức mạnh gấp hai lần kích thước của một byte.


2
Có, sức mạnh gấp hai lần kích thước của một byte. Không có lý do cố hữu tại sao một byte nên là tám bit chứ không phải chín, mười hai hoặc mười lăm.
gnasher729

@ gnasher729, chia 8 (hoặc 16 hoặc 32 hoặc 64) dễ dàng hơn nhiều so với chia 9 hoặc 12 hoặc 15.
robert bristow-johnson

@ gnasher729 nếu từ là bit có sức mạnh 2 bit và sức mạnh của 2 byte, thì điều này ngụ ý rằng byte phải là sức mạnh của 2 bit
vartec

@vartec Bài báo và trích dẫn nói "Các kích thước thường được sử dụng thường là sức mạnh của hai bội số của đơn vị độ phân giải địa chỉ (byte hoặc từ)" và "hầu hết các thiết kế máy tính hiện đại đều có kích thước từ (và các kích thước toán hạng khác) là một sức mạnh gấp hai lần kích thước của một byte. " Tôi đọc "kích thước từ" được đo bằng byte, không phải bit. Không có quy tắc nào về kích thước từ tính theo bit là hoặc nên là lũy thừa 2 trong bài viết.
Andreas

@vartec: NẾU. Rõ ràng không ai sẽ xây dựng một cỗ máy có các từ 32 bit và 12 bit byte. Nhưng không có gì nói với một máy có các từ 48 hoặc 96 bit và byte 12 bit. Và đã có những máy có một từ là mười byte.
gnasher729

0

Nó liên quan chặt chẽ đến không gian địa chỉ. Bằng cách thêm một chút nữa vào bus địa chỉ của bạn, bạn có thể giải quyết gấp đôi số lượng vị trí bộ nhớ. Vì vậy, khi bạn thêm dòng bổ sung đó, bạn cũng có thể sử dụng nó cho toàn bộ phần mở rộng của nó.

Điều này dẫn đến một sự tiến triển tự nhiên của 1, 2, 4, 8, 16, 32 et cetera.

Ở cấp độ kỹ thuật sản xuất, nó cũng dễ dàng lặp lại mô hình in thạch bản tương tự. Đó là, để nhân đôi nó. Nếu bạn bắt đầu với một chốt và sau đó nhân đôi mô hình, bạn sẽ vượt qua 8, không phải 6, 10 hoặc 12.


1
Làm thế nào mà liên quan đến số lượng bit trong một byte? Bạn có nghiêm túc tuyên bố rằng logic 32 bit VÀ dễ thực hiện hơn 36 hoặc 28 bit không?
gnasher729

1
Tôi đã không đưa ra bất kỳ yêu cầu như vậy. Đề nghị của tôi là nó bắt nguồn từ các thiết kế trước đó đã được mở rộng dần dần trong widrh vì các bóng bán dẫn đã rẻ hơn và IC được phép cho các mạch nhỏ hơn.
Martin Maat

1
Lý thuyết thú vị về trình độ kỹ thuật sản xuất. Bạn có thể đang ở một cái gì đó. Bạn có thể mở rộng đoạn văn hoặc có thể cung cấp một liên kết giải thích những điều cơ bản?
Andreas

1
Đó là vô nghĩa. Ví dụ, trong một card đồ họa nơi cần tất cả các loại kích thước bit lẻ ở nhiều nơi khác nhau, mọi thứ đều được thực hiện chính xác với kích thước yêu cầu và không thêm một chút nào. Nếu bộ giải mã h.264 cần độ chính xác 19 bit cho một số thao tác, thì phần cứng thực hiện 19 bit chứ không phải 20 hoặc 24 hoặc 32. Và xin lỗi, bạn không thao tác các mẫu in thạch bản. Bạn xác định phần cứng và sau đó chạy nó thông qua một số phần mềm tạo bố cục.
gnasher729

1
@MartinMaat: Bạn đang nhầm lẫn giữa tiếp thị + tiêu chuẩn hóa với lý do công nghệ. Và công nghệ là những gì chúng ta đang thảo luận.
gnasher729

0

Không phải luôn luôn là chiều rộng từ một sức mạnh của hai. Gần đây tôi đã thực hiện một số mã hóa trong DSP SHArC có độ rộng từ 32 bit cho các số nhưng không phải cho các opcode (rộng 48 bit).

Có lẽ lý do tại sao độ rộng từ là sức mạnh của hai là vì một số hướng dẫn kiểm tra (hoặc đặt hoặc xóa hoặc chuyển đổi) một bit hoặc dịch chuyển (hoặc xoay) sang trái hoặc phải bởi một số bit được chỉ định. Có một trường bit trong opcode để chỉ định vị trí của bit đơn hoặc số bit cần dịch chuyển. Nếu độ rộng từ là lũy thừa của hai, trường bit này yêu cầu các bit log 2 (word_creen) để bao quát toàn bộ từ. Đó là, một từ rộng 32 bit cần một trường 5 bit trong opcode cho các hoạt động này. Nếu từ này rộng 33 bit, nó sẽ cần 6 nếu không nó không thể bao quát toàn bộ từ, nhưng đó cũng là trường hợp nếu từ đó rộng 64 bit.

Các bit trong opcode cực kỳ có giá trị, vì vậy chúng thường không muốn lãng phí chúng. Sau đó, nó có ý nghĩa để làm cho từ có sức mạnh 2 rộng.

Lý do byte rộng 8 bit là vì nó có công suất nhỏ nhất trong hai có thể chứa ký tự ASCII (là 7 bit).


Đây không phải là lĩnh vực chuyên môn của tôi nhưng nó có vẻ như là một lý do hợp lệ cho sức mạnh của hai kích cỡ từ VÀ byte. Tôi tưởng tượng bạn phải lo lắng về UB quá. Đối với một ca 33 bit sẽ yêu cầu opcode 6 bit, nhưng chỉ khoảng một nửa giá trị có thể (0-32) có ý nghĩa hữu ích. Bạn có đồng ý không
Andreas

opcode cần rộng hơn trường bit cần thiết cho số lượng ca. một byte không có gì khác ngoài một từ có 8 bit. lý do tại sao phần cứng máy tính có xu hướng sử dụng kích thước từ 8 hoặc 16 hoặc 32 hoặc 64 bit (không phải lúc nào cũng vậy, DSP56000 cũ có các từ 24 bit) là vì lý do tôi đưa ra ở trên và lý do được đưa ra bởi vartec : được cung cấp một bitmap của các từ được đóng gói và bạn được cung cấp một hàng và số cột của một pixel cụ thể, người ta phải chia số cột cho chiều rộng của từ để biết từ nào sẽ truy cập để kiểm tra hoặc thay đổi pixel. chia cho lũy thừa 2 là dễ dàng.
robert bristow-johnson

"Bitmap của các từ được đóng gói" là gì? HighColor có phù hợp với mô tả đó không?
Andreas

@ robertbristow-johnson: Hoàn toàn thiếu trí tưởng tượng. Với 9 bit byte, chúng tôi sẽ sử dụng các từ 36 bit, 130 triệu màu thay vì 16 triệu màu trong RGBA, RGB666 thay vì RGB555 hoặc RGB565 quái dị cho màu sắc chất lượng thấp và mọi thứ sẽ ổn. Và ASCII sẽ bao gồm 512 ký tự cho đến Latin Extended.
gnasher729

@Andreas, không, tôi có nghĩa là hai "màu". hoàn toàn trắng hoặc đen hoàn toàn.
robert bristow-johnson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.