计算机如何将十进制转换为二进制整数

6
这肯定是一个重复的问题,但我找不到下面问题的答案。
让我们考虑十进制整数14。我们可以使用“除以2”方法(%表示模操作符)获得其二进制表示形式 1110
14 % 2 = 0
 7 % 2 = 1
 3 % 2 = 1
 1 % 2 = 1

计算机如何将十进制转换为二进制整数?

上述方法需要计算机执行算术运算,据我所知,因为算术运算是在二进制数上执行的,所以似乎我们又回到了同样的问题。

我想任何其他算法方法都会遇到同样的问题。计算机如何将十进制转换为二进制整数?

更新:根据与Code-Apprentice的讨论(请参见其答案下的评论),以下是两种感兴趣情况下问题的重新表述:

a)当用户在键盘上输入整数时,如何执行二进制转换?

b)假设在编程语言中有一个数学操作,比如12 / 3,当运行程序时,从十进制到二进制的转换是如何完成的,以便计算机可以进行算术运算?

3个回答

0

确实,就像您在其中一条评论中提到的那样,如果编译器有一个小的查找表来将十进制整数与二进制整数关联起来,那么可以通过简单的二进制乘法和加法来完成。 查找表必须包含单个十进制数字和十、百、千等的二进制关联。 十进制14可以通过将二进制1乘以二进制10并加上二进制4来转换为二进制。 十进制149将是二进制1乘以二进制100,加上二进制4乘以二进制10,并在末尾添加二进制9。


0

程序中对十进制的误解

让我们以C语言为例

int x = 14;

这里的14不是十进制,而是由两个字符1和4组成的,它们写在一起形成了14。

我们知道,字符只是某些二进制值的表示方式
1代表00110001
4代表00110100

可以在此处查看字符的完整ASCII表

因此,字符形式的14实际上被写成二进制00110001 00110100
00110001 00110100 => 这个二进制数被制作成在计算机屏幕上看起来像14的样子(所以我们认为它是十进制)

我们知道数字14最终应该变成14 = 1110
或者我们可以用零填充它,变成
14 = 00001110

为了实现这一点,计算机/处理器只需要进行二进制到二进制的转换,即
00110001 00110100 转换为 00001110
然后我们就完成了


-1

只有二进制

计算机将所有数据存储为二进制。它不会将十进制转换为二进制,因为二进制是它的本地语言。当计算机显示一个数字时,它会从二进制表示转换为任何基数,默认情况下是十进制。

在这里理解的一个关键概念是计算机内部存储和在您的监视器上表示为字符之间的区别。如果您想将数字显示为二进制,可以编写代码中的算法来执行您手动执行的确切步骤。然后,您可以打印由算法计算出的字符10


1
是的,我同意你的最后一条评论。请注意,我不关心从二进制到十进制的转换,而只关心相反的转换。我的上一条评论可能不太清楚。无论如何,在网上进一步搜索后,似乎我错过的要点是:计算机知道如何通过使用查找表将每个数字与其各自的二进制表示相关联(因此它知道例如 10001),然后通过对这些表示进行算术运算来获取整数的二进制表示。 - user8970640
根据您的评论,让我重新表述我的原始问题。一个程序如何将十进制转换为二进制?该程序不能直接在十进制整数上执行算术运算来进行此转换,因为计算机会对二进制表示进行算术运算。 - user8970640
关于我提到的查找表的来源:这个Reddit帖子和这个Physics Forum帖子。可以直接滚动到Schnutzel和DrGreg的回答。 - user8970640
@unfolx 我在这些线程中都没有看到任何查找表。 - Code-Apprentice
a) 当用户在键盘上输入数字时,如何执行二进制转换? b) 在编程语言中给定一个数学运算,比如 12 / 3,当程序运行时如何进行十进制到二进制的转换,以便计算机可以执行算术运算? - user8970640
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接