Có bao nhiêu bit trên mỗi chữ số trong hệ thập phân [đóng]


28

Tôi sẽ dạy cho một nhóm nhỏ mọi người về các hệ thống đánh số trong máy tính và đã tự hỏi có bao nhiêu bit trên mỗi chữ số trong hệ thống thập phân, chẳng hạn:

  • Hex (cơ sở 16) - 4 bit
  • Octal (cơ sở 8) - 3 bit
  • Nhị phân (cơ sở 2) - 1 bit
  • Số thập phân (cơ sở 10) -?

7
Trực giác: Hãy nói những gì bạn tìm kiếm d, nó bao gồm một chữ số thập phân, phạm vi 0..9. 3*dbit có nghĩa là ba chữ số thập phân và cho phép bạn biểu diễn các số nguyên từ phạm vi 0..999. Toàn bộ mười bit (nghĩ nhị phân bây giờ) đưa ra một phạm vi 0..1023. 999 khá gần với 1023, nhưng ít hơn một chút. Vì vậy, bạn có thể mong đợi dnên ít hơn 10/3.
Kamil Maciorowski

5
Bài đăng này có vẻ như sẽ phù hợp hơn với Stack Overflow so với Super User.
gmarmstrong

21
@gmarmstrong: Tôi muốn tranh luận về Toán học.SE (hoặc có thể là SoftwareEngineering.SE). Điều này không liên quan trực tiếp đến một vấn đề lập trình.
Flater

10
@Flater: Toán học chắc chắn là đúng nơi, vì về cơ bản đây là lý thuyết thông tin 101.
MechMK1

7
Không có gì xấu hổ khi không biết điều này, nhưng một người không có thể không phải là người tốt nhất để dạy các hệ thống số.
WGroleau

Câu trả lời:


96

Những gì bạn đang tìm kiếm là logarit 2 dựa trên 10, một con số không hợp lý vào khoảng 3,32192809361 ....

Việc bạn không thể sử dụng số bit nguyên cho một chữ số thập phân là nguyên nhân gốc rễ tại sao nhiều phân số dễ biểu thị trong hệ thập phân (ví dụ 1/5 hoặc 0,2), là không thể (thực sự không khó: không thể) để thể hiện trong nhị phân. Điều này rất quan trọng khi đánh giá các lỗi làm tròn trong số học của dấu phẩy động.


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 .
DavidPostill

20

Nói cách khác, lượng thông tin được chứa trong một chữ số trong các hệ thống này.

Đối với cơ sở 2, cơ sở 4, cơ sở 8, cơ sở 16 và cơ sở 2 N khác , câu trả lời là hiển nhiên bởi vì trong cơ sở 2 N, mỗi chữ số có thể được biểu thị bằng chính xác N chữ số.

Làm thế nào để bạn nhận được N cho 2 N ? Vâng, bạn sử dụng một logarit dựa trên 2, đó là một nghịch đảo của lũy thừa.

  • log 2 2 = 1 (1 bit trên mỗi chữ số trong cơ sở 2)
  • log 2 4 = 2 (2 bit mỗi chữ số trong cơ sở 4)
  • log 2 8 = 3 (3 bit mỗi chữ số trong cơ sở 8)
  • log 2 16 = 4 (4 bit mỗi chữ số trong cơ sở 16)

Các logarit dựa trên K của các số không phải là lũy thừa của K không phải là số chính. Đặc biệt:

  • log 2 10 = 3.321928094887362347870319429361390175864831393024580612054

Con số này có thể trông khó hiểu, nhưng nó thực sự có một số cách sử dụng. Ví dụ, đó là một entropy của một chữ số thập phân.

Tuy nhiên, đối với trường hợp của bạn, tôi không nghĩ giá trị này là bất kỳ mục đích sử dụng nào. Câu trả lời của Christian làm tốt công việc giải thích tại sao.


8

Về vấn đề bit:

Tôi rất tiếc phải nói câu hỏi sai. Bạn sẽ không sử dụng bit theo cách đó. Một bit là một chữ số nhị phân . Bạn có thể chuyển đổi số thập phân 10, thành số nhị phân 1010 (8 + 2), vì vậy bạn cần 4 bit để biểu thị giá trị thập phân 10.


Quyền hạn của 2

Bạn đã rơi vào một cái bẫy, bằng cách sử dụng nhị phân (2), bát phân (8) và thập lục phân (16) làm ví dụ, bởi vì đây đều là các lũy thừa của 2, và do đó bạn có thể nghĩ về chúng theo các bit, trong khi 10 không phải là sức mạnh của 2, vì vậy nó không hoạt động tốt như thế.


18
Câu hỏi không sai. Trong chủ đề của lý thuyết thông tin, việc nói về các bit theo cách này là hoàn toàn bình thường. Và sau đó, câu trả lời của Eugen Rieck là một câu trả lời hay.

2
Tôi đề nghị bạn đề cập đến BCD (số thập phân được mã hóa nhị phân), thường được biểu thị bằng 4 bit trong thiết bị điện tử. Trong thực tế, số bit được sử dụng để biểu thị số thập phân thường là 4, nhưng nó phụ thuộc vào việc thực hiện.
davidmneedham

1
@DavidStockinger Phải, nó phụ thuộc vào câu hỏi lý thuyết hay câu hỏi thực hiện.
davidmneedham

2
ln (10) / ln (2) là câu trả lời lý thuyết. 4 bit là câu trả lời có khả năng thực hiện.
davidmneedham

2
@davidmneedham Không, hầu hết các số được lưu trữ dưới dạng nhị phân. BCD được sử dụng cho các mục đích chuyên ngành hiếm gặp nhưng hầu hết các bảng mã là số thập phân nguyên hoặc dấu phẩy động. Trong các hệ thống này, câu trả lời nhật ký là câu trả lời đúng, nó cung cấp số bit tối thiểu để lưu trữ tất cả các số có độ dài thập phân nhất định (làm tròn) và giải thích tại sao một số bit nhất định không lưu trữ một số chữ số thập phân cố định.
Jack Aidley

7

BCD - Số thập phân được mã hóa nhị phân sử dụng 4 bit cho mỗi chữ số, giống như thập lục phân.

https://en.wikipedia.org/wiki/Binary-coding_decimal


Ngoại trừ "BCD" thường được sử dụng để chỉ mã hóa ký tự 6 bit.
Daniel R Hicks


@DanielRHicks À, được rồi. Wikipedia nói rằng nó đã được sử dụng vào cuối những năm 1950 và đầu những năm 1960 (tức là trước khi EBCDIC được phát minh), vì vậy tôi không xấu hổ vì tôi chưa bao giờ nghe về nó. Mặc dù bây giờ tôi nhận ra rằng cái tên EBCDIC bắt nguồn từ nó! Dù sao, thuật ngữ BCD vẫn không "thường được sử dụng" để chỉ mã hóa như bạn đang nói.
Ông Lister

3

Do đó, việc sử dụng các bit ngụ ý sức mạnh là 2, như những người khác đã nói rằng bạn không thể dễ dàng biến 10 bit thành byte mà không lãng phí. Một giải pháp phổ biến là sử dụng 4 bit theo hệ thập lục phân và lãng phí 6 trạng thái được biểu diễn dưới dạng AF. Điều thú vị là làm toán thập phân với điều này - nó không gọn gàng và đơn giản.

Một ý tưởng giảng dạy hữu ích có thể là so sánh cách Micky Mouse có thể phát triển một hệ thống đếm, vì anh ta chỉ có 4 ngón tay trên mỗi bàn tay - điều này dẫn đến một hệ thống bát phân một cách tự nhiên.


Tôi tin rằng bạn muốn nói đến Hex trong câu trả lời của bạn là Hex của nó có các giá trị AF
user92592

@ user92582 có, ta. Đã sửa.
davidgo

Và bạn có thể sử dụng 6 trạng thái "lãng phí" đó để mã hóa một dấu thập phân, phủ định, dấu kết thúc chuỗi, v.v ... Đối với toán thập phân ... nó không gọn gàng nhưng đơn giản? Chỉ cần viết một số mã để làm những gì chúng tôi dạy trẻ nhỏ: p
Kaithar

@kaithar - Tôi không tin rằng những gì bạn đang đề xuất là hợp lệ, vì bất kỳ một trong những hoạt động đó sẽ yêu cầu một chút hoặc nhiều hơn - mà bạn không có sẵn.
davidgo

1
Không có ý tưởng trong đó "10 bit" đang hình thành. 10 bit = 1024 giá trị. Một chữ số thập phân chỉ có 10 giá trị có thể.
MSalters

3

Đây có thể là một sự đơn giản hóa nhưng nó phụ thuộc vào câu hỏi mà bạn đang hỏi.
(và câu trả lời về cơ bản là bát phân hoặc hex)

Tôi cũng không coi các bit phân số là bit vì trong các bit sử dụng thực tế không có phân số.

Câu 1: Bạn có thể biểu diễn bao nhiêu bit trong một chữ số thập phân ?

A1: Bạn có thể biểu thị 3 bit thông tin trong một chữ số thập phân duy nhất:

Lược đồ phổ biến nhất sẽ là nhị phân thẳng với gói trong đó 0 = 8 = 000 và 1 = 9 = 001. Nhưng bạn có thể sử dụng bất kỳ lược đồ nào, không có gì nói rằng đây là cách duy nhất để mã hóa các bit thành các chữ số thập phân.

  • 0: 000
  • 1: 001
  • 2:00
  • 3: 011
  • 4: 100
  • 5: 101
  • 6: 110
  • 7: 111
  • 8: 000 <- gói (hoặc không sử dụng)
  • 9: 001 <- gói (hoặc không sử dụng)

hoặc là

Câu 2: Cần bao nhiêu bit để biểu diễn một chữ số thập phân?

A2: Bạn cần ít nhất 4 bit để thể hiện tất cả các chữ số thập phân. Với một số chất thải hoặc gói.

Một lần nữa, lược đồ phổ biến nhất sẽ là nhị phân thẳng với gói nhưng bạn có thể sử dụng bất kỳ lược đồ nào khác.

  • 0:00
  • 1:00 0001
  • 2:00
  • 3:00
  • 4: 0100
  • 5: 0101
  • 6: 0110
  • 7: 0111
  • 8: 1000
  • 9: 1001
  • 0: 1010 <- gói (hoặc không sử dụng)
  • 1: 1011 <- gói (hoặc không sử dụng)
  • 2: 1100 <- gói (hoặc không sử dụng)
  • 3: 1101 <- gói (hoặc không sử dụng)
  • 4: 1110 <- gói (hoặc không sử dụng)
  • 5: 1111 <- gói (hoặc không sử dụng)

2

Trong cơ sở 1024, mỗi ký hiệu là 10 bit. Ba chữ số thập phân có cùng lượng thông tin như một chữ số trong cơ sở 1000, nhỏ hơn 1024 một chút. Do đó, một chữ số thập phân có ít hơn 10/3 bit. Giá trị gần đúng này cho 3.333333 ..., trong khi con số chính xác là 3.321928 ...


2
  • Hex (cơ sở 16) - 4 bit
  • Octal (cơ sở 8) - 3 bit
  • Nhị phân (cơ sở 2) - 1 bit
  • Số thập phân (cơ số 10) - 3 1/3 bit.
    2 10 = 1.024
    10 3 = 1.000
    2 20 = 1.048.576
    10 6 = 1.000.000
    3 chữ số trong cơ sở 10 lên đến 999 có thể được giữ trong 10 bit trong cơ sở 2.
    6 chữ số trong cơ sở 10 lên đến 999.999 có thể được giữ trong 20 bit trong cơ sở 2.
    Đây là ý tưởng về kilobyte, megabyte và gigabyte có nguồn gốc.

Nó thực sự hơi nhỏ hơn 3 1/3 ... Câu trả lời của bạn hơi mơ hồ và đề xuất rằng các số lên tới 999 có thể được lưu trữ thay vì các số trong khoảng 0-1023 là một chút sai lệch.
wizzwizz4

0

Tuyên bố miễn trừ trách nhiệm - Tôi không phải là nhà lý thuyết thông tin, chỉ là một con khỉ mã hoạt động chủ yếu trong C và C ++ (và do đó, với các loại chiều rộng cố định), và câu trả lời của tôi sẽ xuất phát từ quan điểm cụ thể đó.

Trung bình phải mất 3,2 bit để biểu thị một chữ số thập phân duy nhất - 0 đến 7 có thể được biểu diễn thành 3 bit, trong khi 8 và 9 yêu cầu 4. (8*3 + 2*4)/10 == 3.21 .

Điều này ít hữu ích hơn âm thanh. Đối với một điều, rõ ràng bạn không có phân số một chút. Mặt khác, nếu bạn đang sử dụng các loại số nguyên gốc (nghĩa là không phải BCD hoặc BigInt), bạn sẽ không lưu trữ các giá trị dưới dạng một chuỗi các chữ số thập phân (hoặc tương đương nhị phân của chúng). Loại 8 bit có thể lưu trữ một số giá trị có tối đa 3 chữ số thập phân, nhưng bạn không thể biểu thị tất cả các giá trị 3 chữ số thập phân trong 8 bit - phạm vi là [0..255]. Bạn không thể biểu diễn các giá trị [256..999]chỉ trong 8 bit.

Khi chúng ta nói về các giá trị , chúng ta sẽ sử dụng số thập phân nếu ứng dụng mong đợi nó (ví dụ: ứng dụng ngân hàng số). Khi chúng ta nói về bit , chúng ta thường sử dụng hex hoặc nhị phân (Tôi hầu như không bao giờ sử dụng bát phân vì tôi làm việc trên các hệ thống sử dụng byte 8 bit và từ 32 bit, không chia hết cho 3).

Các giá trị được biểu thị bằng số thập phân không ánh xạ rõ ràng vào các chuỗi nhị phân. Lấy giá trị thập phân 255. Các khoản tương đương nhị phân của mỗi chữ số sẽ là 010, 101, 101. Tuy nhiên, đại diện nhị phân của giá trị 25511111111. Đơn giản là không có sự tương ứng giữa bất kỳ chữ số thập phân nào trong giá trị với chuỗi nhị phân. Nhưng có một sự tương ứng trực tiếp với các chữ số hex - F == 1111, vì vậy giá trị đó có thể được biểu diễn như FFtrong hex.

Nếu bạn đang ở trên một hệ thống trong đó các byte 9 bit và các từ 36 bit là chuẩn, thì bát phân có ý nghĩa hơn vì các bit tự nhiên được nhóm thành ba.


  1. Trên thực tế, trung bình mỗi chữ số nhỏ hơn vì 0 và 1 chỉ yêu cầu một bit, trong khi 2 và 3 chỉ yêu cầu 2 bit. Nhưng, trong thực tế, chúng tôi xem xét 0 đến 7 để lấy 3 bit. Chỉ làm cho cuộc sống dễ dàng hơn bằng nhiều cách.


4
Nó không hoàn toàn đơn giản; ví dụ, mã hóa 3 hoặc 4 bit đó không đủ để biết liệu 1001001nên 91hay 49.

@Hurkyl: một lần nữa, quan điểm của tôi là sử dụng các kiểu số nguyên có chiều rộng cố định - 1001001ánh xạ tới 73( 64 + 8 + 1). Tôi không giải thích nó như là một chuỗi các chữ số thập phân được mã hóa nhị phân. Nếu nó được coi là BCD, phải sử dụng 4 bit cho mỗi chữ số, thì chúng ta phải giả sử một 0bit dẫn đầu , vì vậy nó phải như vậy 49.
John Bode

2
Tôi chỉ cố gắng chỉ ra rằng các bảng mã có độ dài thay đổi không đơn giản như bạn tạo ra chúng; bạn cần cho biết nơi một biểu tượng kết thúc và một biểu tượng khác bắt đầu. vì vậy bạn không thể chỉ nói rằng bạn có thể biểu diễn 8 và 9 bằng bốn bit, 4-7 với ba, 2-3 với hai và 0-1 với một. Và bạn có thể thấy rằng 3.2con số bạn nhận được thực sự vi phạm lý thuyết thông tin bị ràng buộc log(10)/log(2).

@Hurkyl: Tôi đã không cố gắng làm bất cứ điều gì đơn giản, tôi cũng không nói về bất kỳ loại mã hóa nào. Giá trị lớn nhất có thể được biểu diễn trong số nguyên 32 bit là rộng 10 chữ số thập phân (3,2 bit trên mỗi chữ số), nhưng không có sự tương ứng giữa mã hóa nhị phân của bất kỳ chữ số nào và mã hóa nhị phân của giá trị. Nếu bạn đang sử dụng một số dạng mã hóa nhị phân cho các chữ số thập phân, thì độ rộng phải được cố định BCD hoặc bạn phải sử dụng một loại mã Huffman nào đó mà tôi không ủng hộ.
John Bode

1
Vấn đề với sơ đồ này là bạn đã quên thêm một bit bạn cần cho biết liệu 3 hoặc 4 bit có tuân theo hay không. Và với độ dài trung bình là 4.2 bit trên mỗi chữ số thập phân, điều này thậm chí còn tồi tệ hơn BCD
MSalters

0

Nếu tôi đang dạy điều này, trước tiên tôi sẽ giải thích một số (được biểu thị dưới dạng một chuỗi các chữ số có nghĩa là gì). tức là, từ phải sang trái, giả sử cơ sở n, a * n ^ 0 + b * n ^ 1 + c * n ^ 2 ... z * n ^ y.

Sau đó giải thích rằng 10 ^ 3 xấp xỉ bằng 2 ^ 10. Nó không chính xác và là lý do trong máy tính, chúng ta thường không biết 2k thực sự có nghĩa là gì (nó là 2.000 hay 2.048?) Nó phục vụ khá tốt cho các xấp xỉ nhanh. 2 ^ 16 là khoảng 2 ^ (16 - 10) * 1.000 hoặc 2 ^ 6 (64) * 1.000 hoặc 64.000. Trong thực tế, nó là 65.536, nhưng nếu bạn không bận tâm đến khoảng một phần trăm, thì nó hoạt động khá tốt cho các xấp xỉ nhanh.


Mặc dù đây là một cái nhìn sâu sắc thông minh và đóng góp có giá trị cho chương trình khóa học của OP, nhưng nó không phải là một câu trả lời cho câu hỏi.
Scott
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.