繁体   English   中英

BCD计算器问题

[英]BCD Calculator issue

我正在将十六进制0xE0转换为BCD。 当我这样做时,我得到的是64。我知道这是完全错误的,也许这是我的C ++代码中的问题,但是64听起来不正确。 有任何想法吗? 0xE0是特例吗? 0xE0为十进制224。)

这是我的代码的一部分:

unsigned char Hex2BCD(unsigned char param)
{   unsigned char lo;
    unsigned char hi;
    unsigned char val;
    unsigned char buf[10];

hi = param/ 10;
lo = param- (hi * 10);

val= (hi << 4) + lo;
return val;
}

我的想法是,您转换为BCD的代码存在错误。 它没有执行预期的操作,因此您所观察到的结果是错误的。

除了这个笑话:如果存储在带符号的char中,则为0xe0为负数。 如果您在计算结果时不特别注意所使用的临时变量的符号,那么这可能会给您带来麻烦。

编辑:现在,您已经发布了一些代码,很显然,尽管您将第一个数字的正确值计算为lo ,但是还需要执行另一步骤才能将正确的值获取为hi

使用0xe0作为输入,您实际上是在计算(22<<4) + 4 = 356 = 0x164而不是(2<<8)+(2<<4)+4 = 548 = 0x224

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM