我将向一小群人介绍计算中的编号系统,并想知道十进制系统中每位有多少位,例如:
- 十六进制(基数16)-4位
- 八进制(以8为底)-3位
- 二进制(以2为底)-1位
- 十进制(以10为底)-?
我将向一小群人介绍计算中的编号系统,并想知道十进制系统中每位有多少位,例如:
Answers:
您正在寻找的是基于2的对数10,它是3.32192809489左右的无理数。
不能为十进制数字使用整数位数的事实是为什么许多在十进制系统中易于表达的分数(例如1/5或0.2)是不可能的(不难:真的)的根本原因不可能)以二进制形式表示。在评估浮点算术中的舍入误差时,这一点很重要。
换句话说,这些系统中的一位数字中包含多少信息。
对于基数2,基数4,基数8,基数16和其他2 N个基数,答案是显而易见的,因为在2 N的基数中,每个数字都可以精确地用N个数字表示。
给定2 N,您如何得到N?好吧,您使用基于2的对数,这是幂的倒数。
不是K的幂的基于K的对数不是基数。特别是:
这个数字可能看起来令人困惑,但实际上有一些用途。例如,它是一个十进制数字的熵。
不过,对于您的情况,我认为此值没有任何用处。@Christian的答案很好地解释了原因。
很抱歉,这个问题被误导了。您不会以这种方式使用位。位是二进制数字。您可以将十进制数10转换为二进制1010(8 + 2),因此需要4位来表示十进制值10。
通过使用二进制(2),八进制(8)和十六进制(16)作为示例,您陷入了陷阱,因为它们都是2的幂,因此您可以按位来考虑它们,而10并不是2的幂,因此它不能很好地工作。
BCD-二进制编码的十进制每位使用4位,与十六进制相同。
使用位意味着2的幂,因此,正如其他人所说的那样,您不容易浪费10个位就将其压缩为字节。常见的解决方案是每个十六进制使用4位,并浪费表示为AF的6个状态。有趣的是,这样做是在进行十进制数学运算-它不是整洁而简单的。
一个有用的教学思路可能是比较Micky Mouse可能如何开发计数系统,因为他的每只手只有4个手指-这自然会导致基于八进制的系统。
这可能是一个过分的简化,但取决于您要问的问题。
(答案基本上是八进制或十六进制)
我也不认为小数位是位,因为在实际使用中位没有小数。
问题1:您可以用十进制数字表示多少位?
A1:您可以用一个十进制数字表示3位信息:
最常见的方案是带包装的直接二进制,其中0 = 8 = 000和1 = 9 = 001。但是您可以使用任何方案,没有什么可以说这是将位编码为十进制数字的唯一方法。
要么
问题2:代表十进制数字需要多少位?
A2:您至少需要4位才能代表所有十进制数字。有一些浪费或包裹。
同样,最常见的方案是带包装的直接二进制,但是您可以使用任何其他方案。
免责声明-我不是信息理论家,只是主要在C和C ++(因此使用固定宽度类型)中工作的代码猴子,而我的回答将是从特定角度出发。
这需要平均 3.2个位来表示一个单一的十进制数字- 0到7可以在3个比特来表示,而图8和9需要4 (8*3 + 2*4)/10 == 3.2
1。
这没有听起来那么有用。一方面,您显然一点都没有。另外,如果您使用的是本机整数类型(即,不是BCD或BigInt),则不会将值存储为十进制数字序列(或它们的等效二进制数)。8位类型可以存储某些值,这些值最多可以包含3个十进制数字,但是您不能以8位表示所有3个十进制数字的值-范围为[0..255]
。您不能[256..999]
仅用8位表示值。
在讨论值时,如果应用程序期望使用十进制数(例如,数字银行应用程序),则将使用十进制数。在谈论bit时,通常会使用十六进制或二进制(我几乎从不使用八进制,因为我在使用8位字节和32位字(不能被3整除)的系统上工作)。
用十进制表示的值不能完全映射到二进制序列上。取十进制值255
。每个数字的二进制等同物将是010
,101
,101
。但是,该值的二进制表示形式255
是11111111
。值中的任何十进制数字与二进制序列之间根本没有对应关系。但是与十六进制数字-有直接对应关系F == 1111
,因此可以将值表示为FF
十六进制。
如果您使用9位字节和36位字为标准的系统,则八进制更有意义,因为位自然会分成三位。
1001001
映射到73
(64 + 8 + 1
)。我不将其解释为二进制编码的十进制数字序列。如果假设它是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,但是如果您不介意超出某个百分比,那么它对于快速逼近非常有效。
d
,它覆盖一位小数,范围为0..9
。3*d
位表示三个十进制数字,允许您表示范围内的整数0..999
。整个十位(现在考虑二进制)的范围为0..1023
。999接近1023,但少了一点。因此,您可能会期望d
小于10/3。