Binary 对于算术运算,计算机可以使用二进制代码或一个数字的直接二进制等价物,还是两者都可以?

Binary 对于算术运算,计算机可以使用二进制代码或一个数字的直接二进制等价物,还是两者都可以?,binary,cpu-architecture,symbolic-math,code-conversion,Binary,Cpu Architecture,Symbolic Math,Code Conversion,例如十进制数395的BCD代码为001110010101,直接二进制转换为110001011, 哪一种单值计算机可以用于算术运算大多数CPU只对二进制数提供有效的硬件支持(并且在现代CPU中通常只支持2次方大小,因此您希望至少将其填充到16位) 不过,您可以实现压缩BCD(每半字节1位),使用移位/掩码和比较操作检查某个数字是否变为>9,并手动将进位传播到下一个数字(此字节的高半字节或下一个字节)。i、 e.作为加法/减法的一部分,类似于带进位的扩展精度二进制加法/减法 一些CPU甚至有一个从低

例如十进制数395的BCD代码为001110010101,直接二进制转换为110001011,
哪一种单值计算机可以用于算术运算大多数CPU只对二进制数提供有效的硬件支持(并且在现代CPU中通常只支持2次方大小,因此您希望至少将其填充到16位)

不过,您可以实现压缩BCD(每半字节1位),使用移位/掩码和比较操作检查某个数字是否变为
>9
,并手动将进位传播到下一个数字(此字节的高半字节或下一个字节)。i、 e.作为加法/减法的一部分,类似于带进位的扩展精度二进制加法/减法

一些CPU甚至有一个从低字节执行的标志。e、 在16位和32位模式下,x86甚至有(慢)指令在包含两个压缩BCD数字的字节的正常二进制加减后调整结果。(/DAS和其他未打包BCD指令(每字节1位),全部在64位模式下删除,并且在16位和32位模式下在当前CPU上大部分是慢速微代码)

其他一些ISA对压缩BCD的辅助计算也有类似的支持,如半字节进位标志

解包BCD(每个字节1位)更容易实现,因为您可以比较
>9
的整个字节,而无需先提取低位4位,从而为下一位生成进位信号。(高4位可检查
>=(10)