C 添加相应的数字功能

C 添加相应的数字功能,c,function,C,Function,我有这个功能。它的目的是将传入的两个数字(都是uint8_t)作为参数,并将数字的两个第一位数字相加,然后将数字的第二位数字相加,最后将两个结果相加并返回最终值 当前的功能无法正常工作: uint8_t FormatDSMode(uint8_t data,uint8_t mode) { return (((data/10)<<4)|((mode/10)<<4))|(((data%10)|(mode%10))); } uint8格式模式

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

当前的功能无法正常工作:

  uint8_t FormatDSMode(uint8_t data,uint8_t mode)
    {
        return (((data/10)<<4)|((mode/10)<<4))|(((data%10)|(mode%10)));
    }
uint8格式模式(uint8数据,uint8模式)
{

return(((data/10)代码在应该添加+的位置执行or操作:

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)));
}

进一步:FuffATDSPUDE()可能是一个“错误的BCD转换/添加”。如果LSDUM SUM>9,则需要携带。如果第二位数>9,OP需要考虑该做什么。其他简化可能。

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;
}
uint8格式模式(uint8数据,uint8模式){
uint8\u t Sum=数据%10+模式%10;

return((data/10+mode/10+Sum/10)@Dukeling您从一开始就说对了,问题确实是,所以您指的是十进制数字?我既没有得到71,也没有得到81:(但是,请注意113是0x71…
((data/10)因此,您希望高半字节是数字-div-10位或'd加在一起的结果,低半字节是数字-mod-10位或'd?奇数,因为您的描述需要加法,而示例中没有。请打印这些-
(数据/10)几乎+1。问题是,这不处理进位,所以它不是真的做BCD运算。@OliCharlesworth是真的,OP似乎认为他们想要的指定算法也不是。如果不知道似乎是XY问题的X,这两种方式都会很难。@Oli Charlesworth“不处理进位”-也看到了。怀疑这将是OP的下一篇文章。@chux感谢您的回复,的输出将被输入另一个函数,该函数期望71为十进制值(因此它将看到113)。您是对的,它输出113。ORing比我在描述中提到的添加更正确。因此,进位不会有任何问题。
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;
}
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);
  }