硬汉嵌入式论坛

 找回密码
 立即注册
查看: 435|回复: 2
收起左侧

[技术讨论] 关于uint8 和uint32数据溢出问题

[复制链接]

22

主题

67

回帖

133

积分

初级会员

积分
133
发表于 2023-10-16 16:35:06 | 显示全部楼层 |阅读模式

具体代码如下 为什么uint8 和uint32的计算结果方式不同,按道理来说应该是一致的呀,有知道的大佬来解释下吗,多谢。


    uint8_t data1 = 15;

    uint8_t data2 = 20;
    if (data1 - data2 >= 1)
    {
         uint8_t value = data1-data2;
         printf("大于 data %u\r\n",value);
    }
    else if(data1 -data2 <0)
    {
        printf("小于\r\n"); //两数相减uint8得到的结果是小于
    }

         uint32_t data3 = 15;
         uint32_t data4 = 20;
         if (data3 - data4 >= 1)
         {
                 uint32_t value = data3-data4;
                 printf("大于 data %u\r\n",value);两数相减uint32_t得到的结果是大于
         }
         else
         {
                 printf("小于");
         }


回复

使用道具 举报

210

主题

1043

回帖

1683

积分

至尊会员

More we do, more we can do.

积分
1683
发表于 2023-10-16 17:57:47 | 显示全部楼层
本帖最后由 emwin 于 2023-10-16 17:59 编辑

把原代码改为:
[C] 纯文本查看 复制代码
if (data1 - data2 >= 1)
if (data1 - data2 >= 1U)

输出信息就会一样。
回复

使用道具 举报

22

主题

67

回帖

133

积分

初级会员

积分
133
 楼主| 发表于 2023-10-16 18:13:35 | 显示全部楼层
emwin 发表于 2023-10-16 17:57
把原代码改为:

...

是的大佬 我发现编译器在编译在uint32_t 以下的数据宽带的时候小数-大数得到的数据都是小于0 加了u就变得和uint_32 uint64_ 一致了 这是编译器所决定的么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-4 10:18 , Processed in 0.352234 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表