小编Kam*_*mar的帖子

比较值时数据溢出

我对以下2个代码片段有疑问.

我在64位机器(x86_64-linux-gnu)上运行此代码.我可以看到Val数据类型的值溢出unsigned integer.

#include<stdio.h>
main()
{
    unsigned int Val = 0xFFFFFFFF-15, Val2 = 0xFFFFFFFF;
    if (Val+16 < Val2)
    {
        printf("Val is less than Val2\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果数据类型unsigned char不溢出.

#include<stdio.h>
main()
{
    unsigned char Val = 0xFF-15, Val2 = 0xFF;
    if (Val+16 < Val2)
    {
        printf("Val is less than Val2\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. Val当数据类型是unsigned char时,值是否被提升为高数据类型?
  2. 如果是,为什么它不能从32位升级到64位unsigned long

c

5
推荐指数
1
解决办法
136
查看次数

标签 统计

c ×1