添加相应的数字功能

时间:2013-12-25 15:10:52

标签: c function

我有function。它的目的是将两个数字(两个uint8_t)作为参数传入,并添加数字的两个第一个数字,然后添加数字的第二个数字,最后OR这两个数字结果并返回最终值。

现在的功能无法正常工作:

  uint8_t FormatDSMode(uint8_t data,uint8_t mode)
    {
        return (((data/10)<<4)|((mode/10)<<4))|(((data%10)|(mode%10)));
    }

例如:

  

当我作为参数11和60(均为dec值)传递时,它给出了81的结果   而不是71.你能告诉我我在这里做错了吗?

2 个答案:

答案 0 :(得分:1)

代码执行或|应添加+

uint8_t FormatDSMode(uint8_t data,uint8_t mode) {
       //(((data/10)<<4)|((mode/10)<<4))|(((data%10)|(mode%10)))
  return (((data/10)<<4)+((mode/10)<<4))|(((data%10)+(mode%10)));
}

由于您正在进行BCD转换,请以十六进制打印您的答案以查看71

int main() {
  printf("%X\n", FormatDSMode(11,60));
  // 71
  return 0;
}

此外:FormatDSMode()可能是一个`不正确的 BCD转换/添加。如果LSDigit sum,则需要携带&gt; 9.如果第二个数字> OP,OP需要考虑该怎么做。 9.其他可能的简化。

uint8_t FormatDSMode(uint8_t data,uint8_t mode) {
  uint8_t Sum = data%10 + mode%10;
  return ((data/10 + mode/10 + Sum/10) << 4)  + Sum%10;
}

答案 1 :(得分:0)

@Dukeling你从一开始就是对的,问题确实是&lt;&lt; 4将创造 所需的数字,但是以十六进制形式。以下功能可以完成工作:

uint8_t FormatDSMode(uint8_t data,uint8_t mode)
  {
    uint8_t digit1;     //decades digit
    uint8_t digit2;
    digit1=((data/10))|((mode/10));
    digit2=((data%10))|((mode%10));
    return (digit1*10+digit2);
  }