问题标签 [bcd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1551 浏览

java - Java 从 2 digists 十进制转换为 int 数组中的 BCD

我有必要将两位十进制数转换为 int 数组。例如,如果我们假设我有32我想将其转换为int[] a = new int[2]whereint[0] = 3和的数字int[1] = 2

0 投票
1 回答
1014 浏览

logic - 自补码

这句话被认为是正确的:给定任何自补码的十进制代码方案,如果我们知道数字 283 的代码,那么我们可以推断出 671 的代码。

我想知道为什么。我将 Excess-3 BCD 作为自补码:

所以 283 = 0101 1011 0110 。

671 = 1001 1010 0011
那么为什么像 283-ex3 这样的语句不是 671-ex3 的 1s 补码呢?

0 投票
4 回答
8925 浏览

algorithm - 为什么双打算法有效?

我试图理解为什么双重涉猎算法有效,但我不明白。

对算法的步骤和目的有很多很好的描述,例如 http://www.classiccmp.org/cpmarchives/cpm/mirrors/cbfalconer.home.att.net/download/dubldabl.txthttp: //en.wikipedia.org/wiki/Double_dabble

也有一些解释的尝试。我找到的最好的是这个:http: //www.minecraftforum.net/forums/minecraft-discussion/redstone-discussion-and/340153-why-does-the-double-dabble-algorithm-work#c6

但我仍然觉得我缺少连接部分。这是我得到的:

  • 我明白了,您可以通过从左到右读取二进制数将它们转换为十进制数,从十进制值 0 开始,遍历二进制数的数字,每达到 1 就将十进制数加 1二进制数,并乘以 2,当您移动到下一个数字时(如最后一个链接中所述)。
    • 但是为什么这会导致双涉算法呢?我们不想转换成十进制,我们想转换成 BCD。为什么我们保留乘法(移位),但我们放弃加 1?连接在哪里?
  • 我明白了,当 BCD 字段中的数字在移位前超过 4 时,为什么我们必须加 3。因为如果您希望 BCD 数在移位时乘以 2,则必须进行一些修正。如果您移动 BCD 数字0000 1000(8) 并且想要获得双0001 0011(16),则必须在移动前添加 3(6 的一半),因为只需移动,您最终会得到0001 0000(10)(您错过了6)。
    • 但是为什么我们想要这个,加 1 发生在哪里呢?

我想我只是缺少了一小部分。

0 投票
1 回答
1686 浏览

math - 带“base 10”EMU8086 的减法组件

您好,我正在用汇编程序制作一个以 10 为基数的计算器,它可以采用最大长度为 5 dig 的数字...所以在输入后有两个数字,例如,五个 dig 数字之一存储在 ax 和 bl 中

所以输入的值是12345另一个是例如 is23243并且它存储在第一个数字上CX并且DX与第一个数字的想法相同(存储在AXBX...)现在,我已经制作了加法代码,但我不能弄清楚如何用所有否定问题制作减法代码......

所以我想做的是,例如,取 bh (我没有使用,因为数字不能超过 6 digs...)如果数字是负数,我就放 1,如果它是正数,我'将输入 0 以解决此问题,现在的问题是我不知道如何使代码像所有sub部分、进位和所有东西一样工作......(此外,我使用了诸如 adc、daa 之类的命令。 ..)

最后一个示例:值为:12345 及其正数

现在值为:23243 及其正值 CX - 32 43 DX - 00 02

计算 12345-23243(= -10898)

假设答案是 CX 和 DX,所以它看起来像这样:

答案:(-10898)

有人可以帮我/给我一个我会知道怎么做的示例代码吗?

对不起,如果我有点困惑......

谢谢。编辑:这是您要求的附加代码:

第二次编辑:我知道如何使它成为负数,所以我只需要小于 2 的算法,它不需要处理像 1000-2000 这样的数字 请让它只对像 2000-1000 这样的正值起作用

0 投票
2 回答
690 浏览

assembly - 将8位二进制转换为16位bcd的算法是什么?

将 8 位二进制转换为 16 位 BCD 的算法是什么?

例如:

我怎样才能做到这一点?

1111 1111(二进制)-> 0000 0010 0101 0101

0 投票
4 回答
2032 浏览

c++ - 8位BCD校验

我有一个 8 位 BCD 号码,需要检查它是否是有效的 BCD 号码。我怎样才能以编程方式(C/C++)做到这一点?

例如:0x12345678 有效,但 0x00f00abc 无效。

提前致谢!

0 投票
1 回答
883 浏览

c++ - 通过 BCD 创建大数 - C++

我想创建可以帮助我获得大于 MAXINT 的数字的代码。我听说我可以使用 Binary Code Decimal 来执行此操作,然后将较大数字的每两个十进制数(转换为 BCD)保留在 char 中。但是如何做到这一点?我应该将字符串作为输入,然后以某种方式将每个十进制数转换为 BCD?以及如何将两个转换后的十进制数字转换为一个字符?我是 C++ 新手,不知道该怎么做。

PS我不想使用“特殊”的库来解决这类问题。

0 投票
1 回答
825 浏览

bit-manipulation - 使用整数的二进制编码的十进制加法

如果我有两个打包 BCD 格式的数字并且想要添加它们,像这样添加它们是否是一个好方法:将两个数字都转换为整数,执行正常的整数加法,然后将结果转换回 BCD?

0 投票
2 回答
86 浏览

vhdl - 运行后复位输出

我正在做一个学习VHDL的小项目。目前我正在研究 BCD 转换器(将二进制转换为其 BCD 数字)。

但是在实现测试平台时我被卡住了。应用模式后,它不会重置输出。

我的实体 VHDL 代码:

我的代码测试台:

这是 GTKWave 中的输出。您可以在此处看到,在使用大数字运行代码后,以下数字从之前的数字结束的位置开始。

来自测试台的 GTKWave 输出 (可点击)

希望得到任何提示来解决这个问题。

0 投票
1 回答
265 浏览

binary - 如何在 Fortran 中实现 BCD?

不确定我的问题的标题是否有意义,所以请耐心等待。我想找到一个用尽可能少的位表示单个数字的系统。有一种方法称为“密集压缩十进制”(https://en.wikipedia.org/wiki/Densely_packed_decimal),这将是我理想的解决方案,但我什至不知道这是否可能,或者我如何在没有进一步的情况下实现它大师的研究或指导。

下一个最好的事情是能够使用 4 位寻址系统来表示数字,但我再次不确定这是否可能。

所以!除非实现上述方法/系统,否则我可以选择一个 1 字节的数据类型,我可以用它来表示两个整数对。Fortran 中是否有 1 字节的数据类型,或者它不允许这种级别的控制?