gpt4 book ai didi

c - 添加对应数字功能

转载 作者:太空宇宙 更新时间:2023-11-04 03:50:42 25 4
gpt4 key购买 nike

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

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

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

例如:

when I pass as arguments 11 and 60 (both dec values) it gives me a result of 81 instead of 71. Can you please tell me what I am doing wrong here?

最佳答案

代码执行 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)));
}

因为你正在做一个 BCD转换,以十六进制打印您的答案以查看 71

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

进一步:FormatDSMode() 可能是一个`不正确 BCD 转换/加法。如果LSDigit总和> 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;
}

关于c - 添加对应数字功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20774144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com