Windows计算器能将十进制分数转换为二进制吗?

Windows计算器能将十进制分数转换为二进制吗?

假设我有一个小数,比如 0.21

Windows 计算器能将其转换为二进制吗?

如果我在程序员模式下尝试输入 0.21,它不会对小数点做出反应。就好像我无法在程序员模式下输入小数点一样。当我在程序员模式下选择二进制时,我也无法在程序员模式下输入二进制小数点。“小数点”似乎被禁用了。

我正在使用 Windows 7。我不知道 Windows 10 中是否已启用此功能?

添加
或者更简单的例子,比如 2.5 或 5.125 那么,小数部分可以用二进制表示吗?所以对于 2.5,计算应该显示 010.10 或 1.10*2^3。或者对于 5.125,计算应该显示 0101.001 或 1.01001*2^5 Windows 计算器可以显示吗?

答案1

因此,分数在内存中的表示方式符合浮点数的 IEEE-754 标准。

像十进制 123 这样简单的数字,当存储为浮点数(例如 123.0)时,实际上存储为1.921875 * 2^6 = 1.921875 * 64

将其视为科学计数法,即a * 10^b,其中 a 必须是 [1, 10)(表示从 1.0 到 10(但不包括 10),例如 9.999...8)

您的号码0.21存储在内存中,1.6799999475479126 * 2^(-3)相当于0.20999999344348907470703125(Windows 计算器在手动计算时显示为0.209999993443489075

任何使用此标准的计算器都将以相同的格式存储数字(如果不是,除了不同的字节序之外,它可能有不同的存储浮点数的方式,因此当将值从一个软件/硬件传递到另一个软件/硬件时,必须进行翻译,但这完全是另一个话题)。

现在,回答你的问题,虽然 Windows 计算器以这种形式存储数字,但它并没有被设计为显示内存中的中间/原始值。如果你真的愿意,你可以使用内存查看工具并在你在计算器中输入值时监视它们,但同样,这是一个不同的话题...

查看https://www.h-schmidt.net/FloatConverter/IEEE754.html了解浮点数是如何存储和表示的。

答案2

@Keltari 通常,分数值可以用二进制表示,使用某种“二进制点”(小数点的对应部分)。事实上,这就是计算机中实数/双精度数的表示方式(尽管通常存储的是二进制点位置,而不是“点字符”)。但请记住:并非所有十进制分数都可以用二进制形式表示确切地- 然后必须应用一些舍入,特别是如果只能使用有限的位数(这在现实计算机科学世界中始终是正确的)。

不幸的是,程序员模式下的 Windows 计算器仅对整数值进行操作。实现目标的解决方法如下:

  1. 在标准模式下输入要转换的十进制数(可以是小数),例如0.21

  2. 乘以 2(键* 2 =:)

  3. 重复步骤 2(=单独按键,反复),直到收到整数或非常接近整数的数字(参见下面的注释)。

    重要的!记住,您将初始值乘以 2 的次数(在步骤 2 中并重复 3)。

  4. 切换到程序员模式并输入步骤 3 后收到的值,四舍五入为整数(不幸的是,切换模式时不会自动完成此操作,至少在 Windows 10 的计算器应用程序中不会)。

  5. 显示整数的二进制表示。假设二进制小数点位于最右边(最后一个二进制数字之后)。然后,将其向左移动与步骤 2 和 3 中相乘的位数相同的位置。根据需要添加前导 0。

例子:

  • 原始值:0.21
  • 将其乘以 2 十次 - 您将得到215,04。假设它足够接近整数值(这是任意决定!),您将得到四舍五入的整数215
  • 进入215程序员模式显示其二进制表示:11010111
  • 将二进制小数点向左移动 10 位,得到:.0011010111

备注:正如我之前提到的,并非所有十进制小数值都可以表示确切地二进制形式,所以有时你必须决定什么精度(近似值)能满足你的需求。在上面的例子中,我假设将 215,04 四舍五入为 215 是相对较小的“误差”(低于 1/5000),因此 10 位足以表示原始数字。如果我需要更高的精度,我会乘以 2 而不是十次,而是二十次(结果:220200,96四舍五入为220201整数),并得到 20 位二进制表示.00110101110000101001(“误差”低于 1/5000000)。

顺便说一句,通常计算机中用来表示数据的位数是 2 的幂 - 8、16、32、64,有时是 48 等等。在这种情况下,您可以简单地使用计算器中更快的“乘以 2”的方法,如您在下面的评论中所建议的(*(2^n))。

答案3

不可以。

Qalculate 可以

在此处输入图片描述

Speedcrunch 也可以,不过它的显示方式有点搞笑。我提到 Speedcrunch 是因为我用它来做一些事情。

speedcrunch 显示十六进制如下(在数字前面加上 0x)

在此处输入图片描述

在此处输入图片描述

并像这样显示二进制(在二进制前面加上 0b 有点不寻常,但无论如何,您知道它不是十六进制,因为在设置..结果格式中,选择了二进制..并且十六进制中有 0x 并且十六进制数字为大写)

在此处输入图片描述

相关内容