10 진수 시스템에서 한 자리 당 몇 비트가 [닫힘]


29

저는 소수의 사람들에게 컴퓨터의 넘버링 시스템에 대해 가르치 려하고 십진법에서 몇 자리에 얼마나 많은 비트가 있는지 궁금해하고 있습니다. 예를 들면 다음과 같습니다.

  • 16 진수 (16 진수) - 4 비트
  • 8 진수 (8 진수) - 3 비트
  • 2 진수 (2 진수) - 1 비트
  • 십진수 (밑 10) -?

7
직감 : 당신이 추구하는 것이 무엇인지 말해 봅시다. d, 10 진수 한자리 숫자, 0..9. 3*d 비트는 3 자리 10 진수를 의미하며 범위에서 정수를 나타낼 수 있습니다. 0..999. 전체 10 비트 (현재 바이너리라고 생각 함)의 범위를 지정합니다. 0..1023. 999는 1023에 아주 가깝지만 조금 적습니다. 그래서 당신은 기대할 수 있습니다. d 10/3보다 작아야합니다.
Kamil Maciorowski

5
이 게시물은 Super User보다 Stack Overflow에 더 적합 할 것으로 보인다.
gmarmstrong

21
@ gmarmstrong : 저는 Mathematics.SE (또는 SoftwareEngineering.SE)에 대해 논쟁하겠습니다. 이것은 프로그래밍 문제와 직접적인 관련이 없습니다.
Flater

10
@ 나중에 : 수학 이것이 근본적으로 정보 이론 101이기 때문에 확실히 정확한 장소입니다.
David Stockinger

7
이 사실을 알지 못하는 것은 부끄러움이 없지만 번호 시스템을 가르치는 데 가장 좋은 사람이 아닐지 모릅니다.
WGroleau

답변:


98

당신이 찾고있는 것은 2에 근거한 10의 로그입니다. 이것은 약 3.32192809489 ....의 비합리적 수입니다.

십진수로 정수를 쓸 수 없다는 사실은 십진수로 표현하기 쉬운 소수 (예 : 1/5 또는 0.2)가 불가능한 이유의 근본 원인입니다 (어렵지 않음 : 정말로 불가능)을 표현할 수 있습니다. 부동 소수점 연산에서 반올림 오류를 평가할 때 중요합니다.


코멘트는 확장 토론이 아닙니다. 이 대화는 채팅으로 이동 .
DavidPostill

21

즉,이 시스템에서 한 자리에 포함되는 정보의 양은 어느 정도입니다.

베이스 2,베이스 4,베이스 8,베이스 16 및 기타 2 베이스는 2 번베이스 각 자릿수는 정확히 N 자릿수로 표현 될 수 있습니다.

주어진 N을 어떻게 얻습니까? ? 글쎄, 당신은 지수의 역함수 인 2에 근거한 대수를 사용합니다.

  • 로그 2 2 = 1 (기본 2의 자리 당 1 비트)
  • 로그 2 4 = 2 (기본 4의 자리 당 2 비트)
  • 로그 2 8 = 3 (기본 8의 자리 당 3 비트)
  • 로그 2 16 = 4 (16 진수 당 4 비트)

K의 거듭 제곱이 아닌 수의 K 기반 대수는 기수가 아닙니다. 특히:

  • 로그 2 10 = 3.321928094887362347870319429489390175864831393024580612054 ...

이 숫자는 혼동을 줄 수도 있지만 실제로는 몇 가지 용도가 있습니다. 예를 들어 엔트로피 하나의 10 진수.

귀하의 경우에는, 그러나, 나는이 가치가 어떤 용도의 것이라고 생각하지 않습니다. @ 크리스찬의 대답 이유를 설명하는 데 훌륭한 역할을합니다.


8

비트 주제 :

질문이 잘못 되었다니 유감입니다. 그런 식으로 비트를 사용하지 않을 것입니다. 조금은 2 진수입니다. . 10 진수 10을 2 진수 1010 (8 + 2)로 변환 할 수 있으므로 10 진수 값 10을 표현하려면 4 비트가 필요합니다.


2의 힘

이진수 (2), 8 진수 (16 진수), 16 진수 (16 진수)를 모두 2의 제곱으로 사용하기 때문에 약간의 함정에 빠졌습니다. 따라서 비트 단위로 생각할 수 있습니다. 반면에 10은 2의 거듭 제곱이 아니기 때문에 그렇게 잘 작동하지 않습니다.


18
문제는 잘못된 것이 아닙니다. 정보 이론의 주제에서는 이런 식으로 비트에 대해 이야기하는 것이 정상입니다. 그리고 Eugen Rieck의 대답은 좋은 대답입니다.
Pakk

2
전자 제품에서 일반적으로 4 비트로 표시되는 BCD (이진 코드 10 진수)에 대해 언급하는 것이 좋습니다. 실제로 십진수를 나타내는 데 사용되는 비트 수는 일반적으로 4이지만 구현에 따라 다릅니다.
davidmneedham

1
@DavidStockinger 맞아, 그것은 이론적 질문인지 구현 질문인지에 달려있다.
davidmneedham

2
ln (10) / ln (2)는 이론적 인 대답입니다. 4 비트는 구현 가능성이 높은 대답입니다.
davidmneedham

2
아니, 대부분의 숫자는 바이너리로 저장됩니다. BCD는 드문 특수 목적으로 사용되지만 대부분의 인코딩은 정수 또는 부동 소수점 십진수입니다. 이 시스템에서는 로그 응답이 올 바르고 정확한 십진 길이 (반올림)의 모든 숫자를 저장하는 최소 비트 수를 제공하고 주어진 비트 수가 고정 소수점 이하 자릿수를 저장하지 않는 이유를 설명합니다.
Jack Aidley

7

BCD - Binary Coded Decimal은 16 진수와 동일한 숫자 당 4 비트를 사용합니다.

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


단, "BCD"는 종종 6 비트 문자 인코딩을 나타 내기 위해 사용됩니다.
Daniel R Hicks


@ 대니얼 힉스 아, 그래. Wikipedia는 1950 년대 후반과 1960 년대 초 (즉, EBCDIC가 발명되기 전에) 사용 되었기 때문에 나는 결코 들어 본 적이 없다는 것을 부끄러워하지 않는다고 말합니다. EBCDIC이라는 이름이 파생 된 것임을 알았지 만! 어쨌든 BCD라는 용어는 당신이 말한대로 인코딩을 언급하는 데 "자주 사용"되지는 않습니다.
Mr Lister

3

비트 사용은 2의 거듭 제곱을 의미하므로 다른 사람들이 낭비없이 10 비트를 쉽게 바이트 단위로 만들 수 없다고 말했기 때문에 말입니다. 일반적인 해결책은 16 진수 당 4 비트를 사용하고 A-F로 표시된 6 개 상태를 낭비하는 것입니다. 재미있는 비트는 이것으로 십진법 수학을하고 있습니다 - 깔끔하고 단순하지 않습니다.

유용한 교육 아이디어는 미키 마우스가 카운팅 시스템을 어떻게 개발했는지 비교하는 것입니다. 손으로 4 개의 손가락 만 있으면 자연스럽게 8 진수 기본 시스템으로 연결됩니다.


나는 당신이 16 진수를 A-F 값을 가진 16 진수로 표시한다는 것을 의미한다고 믿습니다.
user92592

@ user92582 예, 따. 수정 됨.
davidgo

그리고 당신은 소수점, 음수, 시퀀스 종결 자 등을 인코딩하기 위해 "낭비"6 상태를 사용할 수 있습니다. 소수 수학에 관해서는 ... 그것은 깔끔하고 단순하지 않습니까? 우리가 작은 아이들을 가르치는 것을하기위한 코드를 작성하십시오 : p
Kaithar

@kaithar - 당신이 제안한 것이 유효하다고 생각하지 않습니다. 그 중 하나가 전체 비트 이상을 필요로하기 때문에 - 당신은 사용할 수 없습니다.
davidgo

1
"10 비트"가 어디서 오는지 전혀 알 수 없습니다. 10 비트 = 1024 값. 10 진수는 10 가지 값만 가질 수 있습니다.
MSalters

3

이것은 단순화일지도 모르지만 당신이 묻는 질문에 달려 있습니다.
(그리고 대답은 기본적으로 8 진수 또는 16 진수입니다)

또한 분수 비트는 비트로 간주하지 않습니다. 실제 사용 비트에는 분수가 없기 때문입니다.

Q1 : 10 진수로 표현할 수있는 비트 수 ?

대답 1 : 하나의 10 진수로 3 비트의 정보를 나타낼 수 있습니다.

가장 일반적인 계획은 0 = 8 = 000 및 1 = 9 = 001 인 줄 바꿈을 사용하는 직선 이진입니다. 그러나 당신은 이것이 비트를 10 진수로 인코딩하는 유일한 방법이라고 말하는 것은 없습니다.

  • 0 : 000
  • 1 : 001
  • 2 : 010
  • 3 : 011
  • 4 : 100
  • 5 : 101
  • 6 : 110
  • 7 : 111
  • 8 : 000- 랩핑 (또는 미사용)
  • 9 : 001- 포장 (또는 미사용)

또는

Q2 : 10 진수를 나타내는 데 몇 비트가 걸립니까?

대답 2 : 모든 십진수를 나타 내기 위해서는 최소한 4 비트가 필요합니다. 약간의 낭비 또는 포장.

가장 일반적인 방법은 줄 바꿈을 사용하여 줄 바꿈을하는 것이지만 다른 방법을 사용할 수도 있습니다.

  • 0 : 0000
  • 1 : 0001
  • 2 : 0010
  • 3 : 0011
  • 4 : 0100
  • 5 : 0101
  • 6시 01 분
  • 7 : 0111
  • 8 : 1000
  • 9 : 1001
  • 0 : 1010 - 포장 (또는 미사용)
  • 1 : 1011 - 포장 (또는 미사용)
  • 2 : 1100 - 포장 (또는 미사용)
  • 3 : 1101 - 포장 (또는 미사용)
  • 4 : 1110 - 포장 (또는 미사용)
  • 5 : 1111 - 포장 (또는 미사용)

2

기본 1024에서 각 기호는 10 비트입니다. 세 개의 십진수는 기본 1000의 한 자리와 동일한 양의 정보를 가지며 1024보다 약간 적습니다. 따라서 십진수는 10/3 비트보다 약간 적습니다. 이 근사치는 3.333333 ...이고, 정확한 숫자는 3.321928 ...입니다.


2
  • 16 진수 (16 진수) - 4 비트
  • 8 진수 (8 진수) - 3 비트
  • 2 진수 (2 진수) - 1 비트
  • 십진수 (밑 10) - 3 1/3 비트.
    2 10 = 1,024
    10 = 1,000
    2 20 = 1,048,576
    10 6 = 1,000,000
    기수 10에서 999까지의 3 자리 숫자는 기수 2에서 10 비트로 유지 될 수 있습니다.
    기수 10의 6 자리수부터 999,999까지는 기수 2의 20 비트로 유지 될 수 있습니다.
    이것은 킬로 바이트, 메가 바이트 및 기가 바이트의 아이디어가 유래 한 것입니다.

실제로 3 1/3보다 약간 적습니다. 대답은 약간 모호합니다. 0993 사이의 숫자 대신 999까지의 숫자를 저장할 수 있다는 제안은 약간 오도하는 것입니다.
wizzwizz4

0

면책 조항 - 저는 정보 이론가가 아닙니다. 주로 C와 C ++에서 주로 일하는 코드 원숭이 (고정 폭 타입을 사용하는)입니다. 제 대답은 특정 관점에서 나온 것입니다.

그것은 평균적으로 단일 10 진수를 나타내는 3.2 비트 - 0 ~ 7은 3 비트로 표현할 수 있으며 8과 9는 4를 필요로합니다. (8*3 + 2*4)/10 == 3.2 1 .

이것은 소리보다 덜 유용합니다. 한 가지는 분명한 사실이 아닙니다. 또 다른 예를 들어, 네이티브 정수 유형 (즉, BCD 또는 BigInt가 아닌)을 사용하는 경우 값을 십진수 시퀀스 (또는 이진 값과 동일)로 저장하지 않습니다. 8 비트 유형은 최대 3 자리 10 진수를 사용하는 값을 저장할 수 있지만 모든 3 자리 10 진수 값을 8 비트로 나타낼 수는 없습니다. 범위는 다음과 같습니다. [0..255]. 값을 나타낼 수 없습니다. [256..999] 단 8 비트.

우리가 얘기 할 때 가치 , 애플리케이션에서 기대하는 경우 십진수를 사용합니다 (예 : 디지털 뱅킹 애플리케이션). 우리가 얘기 할 때 조금 , 우리는 대개 16 진수 또는 2 진수를 사용합니다 (8 비트 바이트와 32 비트 단어를 사용하는 시스템에서 작업하므로 거의 3 진수를 사용하지 않습니다. 3은 나눌 수 없습니다).

십진수로 표현 된 값은 바이너리 시퀀스에 완전히 매핑되지 않습니다. 소수 값 가져 오기 255. 각 자릿수의 이진 값은 다음과 같습니다. 010, 101, 101. 그러나 값의 2 진 표현 255 ~이다. 11111111. 사이에는 아무런 일치도 없습니다. 어떤 이진 시퀀스에 대한 값의 십진수 자릿수. 그러나 16 진수와 직접적인 통신이 있습니다. F == 1111, 그 값은 다음과 같이 나타낼 수있다. FF 16 진수.

9 비트 바이트와 36 비트 단어가 표준 인 시스템에서 비트가 자연스럽게 3 열로 그룹화되므로 8 진수가 더 적합합니다.


  1. 실제로 0과 1은 단일 비트 만 필요로하고 2와 3은 2 비트 만 필요하기 때문에 숫자 당 평균값은 더 작습니다. 그러나 실제로는 0에서 7까지를 고려하여 3 비트를 취합니다. 여러면에서 삶을 편하게 만듭니다.


4
꽤 간단하지 않습니다. 예를 들어, 3 또는 4 비트 인코딩이 1001001 해야한다 91 또는 49.
Hurkyl

@Hurkyl : 다시, 내 관점은 고정 너비 정수 형식을 사용하고 있습니다 - 1001001 ~에지도 73 ( 64 + 8 + 1 ). 나는 이것을 2 진화 된 10 진수의 시퀀스로 해석하지 않는다. 그것이 있다면 가정의 BCD가되어야합니다. BCD은 숫자 당 4 비트를 사용해야합니다. 0 조금, 그래서 그것이 있어야합니다 49.
John Bode

2
가변 길이 인코딩은 당신이하는 것처럼 간단하지 않다는 것을 지적하려고했습니다. 당신은 하나의 상징이 어디에서 끝나고 다른 상징이 시작되는지를 말해야합니다. 그래서 당신은 단지 4 비트로 8과 9, 3과 4 ~ 7, 2로 2 ~ 3, 1로 0 ~ 1을 나타낼 수 있다고 말할 수 없습니다. 그리고 당신은 3.2 당신이 실제로 정보 이론의 경계를 위반하는 수치 log(10)/log(2).
Hurkyl

@Hurkyl : 나는 단순하게 만들려고 노력하지 않았으며 어떤 종류의 인코딩에 대해서도 이야기하지 않았습니다. 32 비트 정수로 표현할 수있는 가장 큰 값은 10 진수 10 자릿수 (3.2 비트 씩)이지만 숫자의 2 진 인코딩과 값의 2 진 인코딩 간에는 아무런 일치가 없습니다. 10 진수로 2 진 코딩을 사용하는 경우 너비를 고정해야합니다. 류 풍의 BCD, 또는 당신은 옹호하지 않는 어떤 종류의 허프만 코딩을 사용해야합니다.
John Bode

1
이 구성표의 문제점은 3 비트 또는 4 비트가 있는지 여부를 나타내는 데 필요한 추가 비트 하나를 잊어 버린 것입니다. 그리고 10 진수 당 4.2 비트의 평균 길이로, 이것은 BCD보다 훨씬 더 나쁩니다.
MSalters

0

제가 이것을 가르치고 있다면, 우선 숫자가 무엇을 의미하는지 (일련의 숫자로 표현됨) 설명 할 것입니다. 즉,베이스 n, a * n ^ 0 + b * n ^ 1 + c * n ^ 2 ... z * n ^ y를 가정하여 오른쪽에서 왼쪽으로.

그런 다음 10 ^ 3이 2 ^ 10과 거의 동일하다는 것을 설명하십시오. 정확하지 않고 컴퓨터의 이유이기 때문에 2k가 실제로 무엇을 의미하는지 종종 알지 못합니다 (2,000 또는 2,048입니까?) 빠른 근사를 위해 상당히 잘 작동합니다. 2 ^ 16은 약 2 ^ (16 - 10) * 1,000 또는 2 ^ 6 (64) * 1,000 또는 64,000입니다. 실제로는 65,536이지만, 약 1 % 정도 벗어나도 괜찮다면 빠른 근사치에 대해서는 꽤 잘 작동합니다.


이것이 영리한 통찰력과 OP 커리큘럼의 가치있는 공헌이지만,이 질문에 대한 답이 아닙니다.
Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.