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