问题标签 [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.
java - Java 从 2 digists 十进制转换为 int 数组中的 BCD
我有必要将两位十进制数转换为 int 数组。例如,如果我们假设我有32
我想将其转换为int[] a = new int[2]
whereint[0] = 3
和的数字int[1] = 2
。
logic - 自补码
这句话被认为是正确的:给定任何自补码的十进制代码方案,如果我们知道数字 283 的代码,那么我们可以推断出 671 的代码。
我想知道为什么。我将 Excess-3 BCD 作为自补码:
所以 283 = 0101 1011 0110 。
671 = 1001 1010 0011
那么为什么像 283-ex3 这样的语句不是 671-ex3 的 1s 补码呢?
algorithm - 为什么双打算法有效?
我试图理解为什么双重涉猎算法有效,但我不明白。
对算法的步骤和目的有很多很好的描述,例如 http://www.classiccmp.org/cpmarchives/cpm/mirrors/cbfalconer.home.att.net/download/dubldabl.txt或 http: //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 发生在哪里呢?
我想我只是缺少了一小部分。
math - 带“base 10”EMU8086 的减法组件
您好,我正在用汇编程序制作一个以 10 为基数的计算器,它可以采用最大长度为 5 dig 的数字...所以在输入后有两个数字,例如,五个 dig 数字之一存储在 ax 和 bl 中
所以输入的值是12345
另一个是例如 is23243
并且它存储在第一个数字上CX
并且DX
与第一个数字的想法相同(存储在AX
和BX
...)现在,我已经制作了加法代码,但我不能弄清楚如何用所有否定问题制作减法代码......
所以我想做的是,例如,取 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 这样的正值起作用
assembly - 将8位二进制转换为16位bcd的算法是什么?
将 8 位二进制转换为 16 位 BCD 的算法是什么?
例如:
我怎样才能做到这一点?
1111 1111(二进制)-> 0000 0010 0101 0101
c++ - 8位BCD校验
我有一个 8 位 BCD 号码,需要检查它是否是有效的 BCD 号码。我怎样才能以编程方式(C/C++)做到这一点?
例如:0x12345678 有效,但 0x00f00abc 无效。
提前致谢!
c++ - 通过 BCD 创建大数 - C++
我想创建可以帮助我获得大于 MAXINT 的数字的代码。我听说我可以使用 Binary Code Decimal 来执行此操作,然后将较大数字的每两个十进制数(转换为 BCD)保留在 char 中。但是如何做到这一点?我应该将字符串作为输入,然后以某种方式将每个十进制数转换为 BCD?以及如何将两个转换后的十进制数字转换为一个字符?我是 C++ 新手,不知道该怎么做。
PS我不想使用“特殊”的库来解决这类问题。
bit-manipulation - 使用整数的二进制编码的十进制加法
如果我有两个打包 BCD 格式的数字并且想要添加它们,像这样添加它们是否是一个好方法:将两个数字都转换为整数,执行正常的整数加法,然后将结果转换回 BCD?
binary - 如何在 Fortran 中实现 BCD?
不确定我的问题的标题是否有意义,所以请耐心等待。我想找到一个用尽可能少的位表示单个数字的系统。有一种方法称为“密集压缩十进制”(https://en.wikipedia.org/wiki/Densely_packed_decimal),这将是我理想的解决方案,但我什至不知道这是否可能,或者我如何在没有进一步的情况下实现它大师的研究或指导。
下一个最好的事情是能够使用 4 位寻址系统来表示数字,但我再次不确定这是否可能。
所以!除非实现上述方法/系统,否则我可以选择一个 1 字节的数据类型,我可以用它来表示两个整数对。Fortran 中是否有 1 字节的数据类型,或者它不允许这种级别的控制?