我有以下代码:
所以问题是:为什么0x80000000是一个无符号整数?我能否以某种方式使其成为有符号的来消除警告?
据我了解,0x80000000将会是INT_MIN,因为它超出了正整数的范围。但是为什么编译器假设我想要一个正数?
我正在Linux上使用gcc版本4.8.1 20130909进行编译。
#include <iostream>
using namespace std;
int main()
{
int a = 0x80000000;
if(a == 0x80000000)
a = 42;
cout << "Hello World! :: " << a << endl;
return 0;
}
输出结果为
Hello World! :: 42
所以比较是有效的。但编译器告诉我
g++ -c -pipe -g -Wall -W -fPIE -I../untitled -I. -I../bin/Qt/5.4/gcc_64/mkspecs/linux-g++ -o main.o ../untitled/main.cpp
../untitled/main.cpp: In function 'int main()':
../untitled/main.cpp:8:13: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
if(a == 0x80000000)
^
所以问题是:为什么0x80000000是一个无符号整数?我能否以某种方式使其成为有符号的来消除警告?
据我了解,0x80000000将会是INT_MIN,因为它超出了正整数的范围。但是为什么编译器假设我想要一个正数?
我正在Linux上使用gcc版本4.8.1 20130909进行编译。
warning: comparison between signed and unsigned integer expressions [-Wsign-compare] if(a == -0x80000000)
所以它仍然在抱怨。 - Adamsigned int
,所以编译器将其变为unsigned
。 - Konrad Rudolph