首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加相应的数字函数

添加相应的数字函数
EN

Stack Overflow用户
提问于 2013-12-25 15:10:52
回答 2查看 82关注 0票数 1

我有这个function。它的目的是将传入的两个数字(都是uint8_t)作为参数,并将数字的两个1位数相加,然后添加数字的2位数,最后OR两个结果并返回最后的值。

现在的功能不能正常工作:

代码语言:javascript
复制
  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。你能告诉我我在这里做错了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-25 15:20:16

代码执行一个或|,它应该在其中添加+

代码语言:javascript
复制
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

代码语言:javascript
复制
int main() {
  printf("%X\n", FormatDSMode(11,60));
  // 71
  return 0;
}

此外: FormatDSMode()可能是“不正确的BCD转换/加法”。需要携带如果LSDigit和> 9。OP需要考虑做什么,如果第二位数> 9。其他简化可能。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2013-12-25 21:41:22

@Dukeling您从一开始就正确,问题确实是<< 4将创建所需的数字,但以十六进制的形式出现。下面的职能是正确的:

代码语言:javascript
复制
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);
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20774144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档