저는 소수의 사람들에게 컴퓨터의 넘버링 시스템에 대해 가르치 려하고 십진법에서 몇 자리에 얼마나 많은 비트가 있는지 궁금해하고 있습니다. 예를 들면 다음과 같습니다.
- 16 진수 (16 진수) - 4 비트
- 8 진수 (8 진수) - 3 비트
- 2 진수 (2 진수) - 1 비트
- 십진수 (밑 10) -?
저는 소수의 사람들에게 컴퓨터의 넘버링 시스템에 대해 가르치 려하고 십진법에서 몇 자리에 얼마나 많은 비트가 있는지 궁금해하고 있습니다. 예를 들면 다음과 같습니다.
답변:
당신이 찾고있는 것은 2에 근거한 10의 로그입니다. 이것은 약 3.32192809489 ....의 비합리적 수입니다.
십진수로 정수를 쓸 수 없다는 사실은 십진수로 표현하기 쉬운 소수 (예 : 1/5 또는 0.2)가 불가능한 이유의 근본 원인입니다 (어렵지 않음 : 정말로 불가능)을 표현할 수 있습니다. 부동 소수점 연산에서 반올림 오류를 평가할 때 중요합니다.
즉,이 시스템에서 한 자리에 포함되는 정보의 양은 어느 정도입니다.
베이스 2,베이스 4,베이스 8,베이스 16 및 기타 2 엔 베이스는 2 번베이스 엔 각 자릿수는 정확히 N 자릿수로 표현 될 수 있습니다.
주어진 N을 어떻게 얻습니까? 엔 ? 글쎄, 당신은 지수의 역함수 인 2에 근거한 대수를 사용합니다.
K의 거듭 제곱이 아닌 수의 K 기반 대수는 기수가 아닙니다. 특히:
이 숫자는 혼동을 줄 수도 있지만 실제로는 몇 가지 용도가 있습니다. 예를 들어 엔트로피 하나의 10 진수.
귀하의 경우에는, 그러나, 나는이 가치가 어떤 용도의 것이라고 생각하지 않습니다. @ 크리스찬의 대답 이유를 설명하는 데 훌륭한 역할을합니다.
질문이 잘못 되었다니 유감입니다. 그런 식으로 비트를 사용하지 않을 것입니다. 조금은 2 진수입니다. . 10 진수 10을 2 진수 1010 (8 + 2)로 변환 할 수 있으므로 10 진수 값 10을 표현하려면 4 비트가 필요합니다.
이진수 (2), 8 진수 (16 진수), 16 진수 (16 진수)를 모두 2의 제곱으로 사용하기 때문에 약간의 함정에 빠졌습니다. 따라서 비트 단위로 생각할 수 있습니다. 반면에 10은 2의 거듭 제곱이 아니기 때문에 그렇게 잘 작동하지 않습니다.
BCD - Binary Coded Decimal은 16 진수와 동일한 숫자 당 4 비트를 사용합니다.
비트 사용은 2의 거듭 제곱을 의미하므로 다른 사람들이 낭비없이 10 비트를 쉽게 바이트 단위로 만들 수 없다고 말했기 때문에 말입니다. 일반적인 해결책은 16 진수 당 4 비트를 사용하고 A-F로 표시된 6 개 상태를 낭비하는 것입니다. 재미있는 비트는 이것으로 십진법 수학을하고 있습니다 - 깔끔하고 단순하지 않습니다.
유용한 교육 아이디어는 미키 마우스가 카운팅 시스템을 어떻게 개발했는지 비교하는 것입니다. 손으로 4 개의 손가락 만 있으면 자연스럽게 8 진수 기본 시스템으로 연결됩니다.
이것은 단순화일지도 모르지만 당신이 묻는 질문에 달려 있습니다.
(그리고 대답은 기본적으로 8 진수 또는 16 진수입니다)
또한 분수 비트는 비트로 간주하지 않습니다. 실제 사용 비트에는 분수가 없기 때문입니다.
Q1 : 10 진수로 표현할 수있는 비트 수 ?
대답 1 : 하나의 10 진수로 3 비트의 정보를 나타낼 수 있습니다.
가장 일반적인 계획은 0 = 8 = 000 및 1 = 9 = 001 인 줄 바꿈을 사용하는 직선 이진입니다. 그러나 당신은 이것이 비트를 10 진수로 인코딩하는 유일한 방법이라고 말하는 것은 없습니다.
또는
Q2 : 10 진수를 나타내는 데 몇 비트가 걸립니까?
대답 2 : 모든 십진수를 나타 내기 위해서는 최소한 4 비트가 필요합니다. 약간의 낭비 또는 포장.
가장 일반적인 방법은 줄 바꿈을 사용하여 줄 바꿈을하는 것이지만 다른 방법을 사용할 수도 있습니다.
기본 1024에서 각 기호는 10 비트입니다. 세 개의 십진수는 기본 1000의 한 자리와 동일한 양의 정보를 가지며 1024보다 약간 적습니다. 따라서 십진수는 10/3 비트보다 약간 적습니다. 이 근사치는 3.333333 ...이고, 정확한 숫자는 3.321928 ...입니다.
면책 조항 - 저는 정보 이론가가 아닙니다. 주로 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 진수가 더 적합합니다.
1001001
해야한다 91
또는 49
.
1001001
~에지도 73
( 64 + 8 + 1
). 나는 이것을 2 진화 된 10 진수의 시퀀스로 해석하지 않는다. 그것이 있다면 가정의 BCD가되어야합니다. BCD은 숫자 당 4 비트를 사용해야합니다. 0
조금, 그래서 그것이 있어야합니다 49
.
3.2
당신이 실제로 정보 이론의 경계를 위반하는 수치 log(10)/log(2)
.
제가 이것을 가르치고 있다면, 우선 숫자가 무엇을 의미하는지 (일련의 숫자로 표현됨) 설명 할 것입니다. 즉,베이스 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 % 정도 벗어나도 괜찮다면 빠른 근사치에 대해서는 꽤 잘 작동합니다.
d
, 10 진수 한자리 숫자,0..9
.3*d
비트는 3 자리 10 진수를 의미하며 범위에서 정수를 나타낼 수 있습니다.0..999
. 전체 10 비트 (현재 바이너리라고 생각 함)의 범위를 지정합니다.0..1023
. 999는 1023에 아주 가깝지만 조금 적습니다. 그래서 당신은 기대할 수 있습니다.d
10/3보다 작아야합니다.