我已經從低於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」。這些類型的大小是特定於您的編譯器的,您可以輕鬆找到它。 –