我已经从低于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");
}
}
如果数据类型是unsigned char
它不会溢出。
#include<stdio.h>
main()
{
unsigned char Val = 0xFF-15, Val2 = 0xFF;
if (Val+16 < Val2)
{
printf("Val is less than Val2\n");
}
}
我有两个问题:
- 是否值
Val
得到提升到高的数据类型,数据类型是无符号的字符?- 如果是的话,为什么没有得到它从32位提升到64位
unsigned long
?
这不是90年代 - 现在需要'main'上的返回类型。 – InternetAussie
当进行算术运算时,如果可以适用,所有内容都会被提升为“int”,否则所有内容都会被提升为“unsigned int”。这些类型的大小是特定于您的编译器的,您可以轻松找到它。 –