十进制系统中每个数字有多少位?

十进制系统中每个数字有多少位?

102你要找的是以2为底的10的对数,它是一个约为3.32192809489的无理数。

不能用整数位数来表示十进制数字是导致许多在十进制系统中容易表达的分数(例如1/5或0.2)在二进制中无法(不是困难:真的是不可能)表达的根本原因。这在评估浮点运算中的舍入误差时非常重要。

- Eugen Rieck1评论不适合进行长时间讨论;此对话已被移至聊天室。 - DavidPostill回答链接21换句话说,在这些系统中,一个单个数字包含多少信息量。

对于基数为2、4、8、16和其他2^N的进制,答案是显而易见的,因为在基数为2^N的进制中,每个数字可以用精确地N位表示。

要求出N怎么办?嗯,你需要使用以2为底的对数,它是指数运算的反函数。

- log2 2 = 1(二进制中每个数字占1位)

- log2 4 = 2(四进制中每个数字占2位)

- log2 8 = 3(八进制中每个数字占3位)

- log2 16 = 4(十六进制中每个数字占4位)

不是K的幂次的数字的K进制对数不是基数。特别地:

- log2 10 = 3.321928094887362347870319429489390175864831393024580612054...

这个数字看起来可能令人困惑,但实际上它有一些用途。例如,它是一个十进制位的熵。

不过对于你的情况,我认为这个值没有任何用处。@Christian's answer很好地解释了原因。

- gronostaj回答链接8关于比特的主题:

很抱歉地说,这个问题是误导的。你不会以那种方式使用比特。比特是一个二进制数字。你可以将十进制数10转换为二进制数1010(8+2),所以你需要4个比特来表示十进制值10。

2的幂次方

你陷入了一个小陷阱,因为你使用了二进制(2),八进制(8)和十六进制(16)作为例子,因为它们都是2的幂次方,所以可以用位来思考,而10不是2的幂次方,所以在这种情况下并不适用。

- Christian821这个问题并不是误导性的。在信息论的主题中,用这种方式谈论比特是完全正常的。而且Eugen Rieck的回答是一个很好的回答。 - user831198没错,你可以像Eugen Riecek建议的那样使用浮点数而不是整数来描述它,并从中得到一个实际的答案。我不确定你会用这个答案做什么,但这并不重要。 - Christian2我建议你提到BCD(二进制编码十进制),在电子学中通常用4位表示。从实际角度来看,用于表示十进制数的位数通常是4位,但这取决于具体实现方式。 - davidmneedham@davidmneedham 他们被编码为4位的原因是因为 - 正如Eugen Rieck所指出的 - 十进制数字具有3

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

- CWS Matt3除了“BCD”通常用来指代6位字符编码之外。 - Daniel R Hicks@MrLister - https://en.wikipedia.org/wiki/BCD_(character_encoding) - Daniel R Hicks@DanielRHicks 啊,好的。维基百科上说它在20世纪50年代末和60年代初使用(即在EBCDIC发明之前),所以我并不感到羞愧我从未听说过它。尽管我现在意识到EBCDIC的名称是由它衍生而来!无论如何,你所说的BCD这个术语并不仍然“经常用于”指代编码方式。 - Mr Lister回答链接3使用位数意味着2的幂,因此正如其他人所说,你不能轻易地将10个位装入字节中而不浪费空间。一个常见的解决方案是使用4位,就像十六进制一样,并浪费表示为A-F的6个状态。有趣的是用这种方式进行十进制运算-它并不简洁和简单。

一个有用的教学想法可能是比较米老鼠可能如何发展计数系统,因为他每只手只有4根手指-这自然导致了一个八进制的基于系统。

- davidgo7我相信你在回答中想要提到的是十六进制(Hex),因为十六进制才具有A-F的取值范围。 - user92592@user92582 是的,谢谢。已经更正了。 - davidgo而且你可以使用这些“浪费”的6个状态来编码小数点、负数、序列终止符等。至于十进制数学...它不太整齐,但很简单?只需编写一些代码来执行我们教给小孩子的操作就好了 :p - Kaithar@kaithar - 我不相信你提出的观点是有效的,因为其中任何一种操作都需要至少一个完整的位或更多 - 而你没有可用的。 - davidgo也许你误解了我的意思,但是这个提议完全有效...它是标准的符号编码。假设0000-1001是普通的BCD码,1010是十进制分隔符,1110是负号,1111是终止符。当你将数字编码为一系列半字节时,确实需要一个理解这些符号的数学库,但这已经是一种奇怪的需求了。 - Kaithar1不知道这里的“10位”是从哪里来的。10位=1024个值。一个十进制数字只有10个可能的值。 - MSalters@MSalters 有10个州的拼写错误。 - wizzwizz4回答链接3在1024进制中,每个符号占据10位。三个十进制数字的信息量与1000进制中的一个数字相同,稍微小于1024。因此,一个十进制数字的信息量略小于10/3位。这个近似值为3.333333...,而精确的数字是3.321928...

- Acccumulation回答链接3这可能是一个过于简化的说法,但它取决于你所问的问题。

(答案基本上是八进制或十六进制)

我也不认为小数位是位,因为在实际使用中,位没有小数部分。

问题1:一个十进制数字可以表示多少位?

答案1:你可以用一个十进制数字表示3位信息:

最常见的方案是直接二进制编码,其中0=8=000,1=9=001。但你可以使用任何方案,没有什么规定说这是将位编码成十进制数字的唯一方式。

0: 000

1: 001

2: 010

3: 011

4: 100

5: 101

6: 110

7: 111

8: 000 <- 包装(或未使用)

9: 001 <- 包装(或未使用)

或者

問題2:一個十進制數字需要多少位元表示?

答案2:至少需要4個位元來表示所有的十進制數字,但可能會有一些浪費或包裹。

最常見的方案是直接使用二進制並進行包裹,但你也可以使用其他方案。

0: 0000

1: 0001

2: 0010

3: 0011

4: 0100

5: 0101

6: 0110

7: 0111

8: 1000

9: 1001

0: 1010 <- 包裹(或未使用)

1: 1011 <- 包裹(或未使用)

2: 1100 <- 包裹(或未使用)

3: 1101 <- 包裹(或未使用)

4: 1110 <- 包裹(或未使用)

5: 1111 <- 包裹(或未使用)

- Justin Ohms回答链接2十六进制(基数16)- 4位

八进制(基数8)- 3位

二进制(基数2)- 1位

十进制(基数10)- 3 1/3位。

2的10次方= 1,024

10的3次方= 1,000

2的20次方= 1,048,576

10的6次方= 1,000,000

十进制中的3位数,最大为999,可以用2进制的10位表示。

十进制中的6位数,最大为999,999,可以用2进制的20位表示。

这就是千字节、兆字节和吉字节的概念来源。

- Russell Hankins1实际上稍微小于3 1/3... 你的回答有点含糊不清,并且暗示可以存储0-1023之间的数字,这有点误导。 - wizzwizz4回答链接0免责声明 - 我不是信息论专家,只是一个主要使用C和C++(因此使用固定宽度类型)的码农,我的回答将从这个特定角度出发。

平均而言,表示一个十进制数字需要3.2位 - 0到7可以用3位表示,而8和9则需要4位。(8*3 + 2*4)/10 == 3.21。

这听起来并没有那么有用。首先,显然你不能有小数位的比特数。其次,如果你使用原生整数类型(即非BCD或BigInt),你不会将值存储为十进制数字序列(或它们的二进制等价物)。一个8位类型可以存储一些占据3个十进制数字的值,但你不能用8位表示所有的3位十进制数字 - 范围是[0..255]。你无法用仅有8位来表示值[256..999]。

当我们谈论“值”时,如果应用程序期望使用十进制(例如数字银行应用程序),我们将使用十进制。当我们谈论“位”时,通常会使用十六进制或二进制(我几乎从不使用八进制,因为我在使用8位字节和32位字的系统上工作,这些数字不能被3整除)。

以十进制值255为例,每个数字的二进制等价物分别是010、101、101。然而,值255的二进制表示是11111111。在值的十进制数字与二进制序列之间根本没有对应关系。但是,十六进制数字与二进制有直接对应关系——F等于1111,所以该值可以用十六进制表示为FF。

如果您使用的是9位字节和36位字的系统,则八进制更合理,因为位自然地分组成三个一组。

实际上,每个数字的平均值较小,因为0和1只需要一个比特,而2和3只需要2个比特。但是,在实践中,我们认为0到7需要3个比特。这样在很多方面都更加便捷。

- John Bode84这并不是那么简单;例如,仅用3或4位编码无法确定 1001001 应该是 91 还是 49。 - user409120@Hurkyl: 再次强调,我认为应该使用固定宽度的整数类型 - 1001001 对应的是 73 (64 + 8 + 1)。我并不将其解释为二进制编码的十进制数字序列。如果它应该是BCD码,每个数字需要4位,那么我们必须假设前导的0位,所以结果应该是49。 - John Bode2我只是想指出可变长度编码并不像你所说的那么简单;你需要确定一个符号在哪里结束,另一个符号从哪里开始。所以你不能仅仅说用四位表示8和9,用三位表示4-7,用两位表示2-3,用一位表示0-1。而且你可以看到,你得到的3.2这个数字实际上违反了信息论的界限log(10)/log(2)。 - user409120@Hurkyl:我并不是试图简化任何事情,也没有谈论任何形式的编码。在32位整数中,可以表示的最大值为10个十进制数字宽度(每个数字3.2位),但是没有任何数字的二进制编码与该值的二进制编码之间存在对应关系。如果你正在使用某种形式的二进制编码来表示十进制数字,那么要么宽度必须固定(比如BCD),要么你必须使用某种类型的哈夫曼编码,而我并不提倡这种做法。 - John Bode如果你声明01代表一个数字,那么你可以用32位编码一个16位数。但是当人们谈论编码十进制数字所需的位数时,并不是指这个意思,而你所说的也不是。 - Acccumulation1这个方案的问题是,你忘记了额外的一位,用来指示后面跟随的是3位还是4位。而且平均每个十进制数字需要4.2位二进制表示,这比BCD还要糟糕。 - MSalters在8位中,你可以完美地表示大于255的值。你只是不能用8位表示超过256个离散值。通常我们选择将8位空间映射到[+0..+255]范围(无符号)或者[-128..+127]范围(有符号,补码表示法)。但如果其他映射对特定应用更合理,我们并没有必须选择那个特定的映射的理由。以实际例子来说,这就是许多图像文件格式如何通过查找表从8位字节值(一个像素的存储)映射到24位RGB颜色值(用于显示)的方式。 - user@MSalters 可变长度编码也以容易出错而臭名昭著,特别是对于解析器而言。我赞赏一些思考在UTF-8中的原因,包括US-ASCII在字节级别上自动成为有效的UTF-8,但在它和多个Unicode代码点合并成单个字符显示在屏幕上之间,让我们只说我很高兴没有被指派编写UTF-8 Unicode解析器,即使是像查找字符串中字符数量或提取子字符串这样简单的任务。Schlemiel the painter一直都做得对! - user回答链接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,但如果你不介意偏差大约百分之一,它对于快速近似计算效果还是相当不错的。

- Dale Chatham1虽然这是一个聪明的洞见和对OP课程大纲的有价值的贡献,但它并不是问题的答案。 - Scott - Слава Україні回答链接

相关推荐

详细拆解公众号流量主的7种变现方式
bet3365备用

详细拆解公众号流量主的7种变现方式

📅 06-27 👁️ 2732
球球大作战刷棒棒糖方法 球球大作战免费刷棒棒糖网站工具
王者内测皮肤限时获取攻略:掌握技巧,轻松获得皮肤时间限定权益在2025年