error C4146: 一元負運算符應用於無符號類型,結果仍為無符號類型;
那么什么情況下會遇見這種錯誤呢,例如下代碼:
錯誤代碼1:int number = -2147483648; //error C4146: 一元負運算符應用於無符號類型,結果仍為無符號類型;
錯誤代碼2:if ( num >= -2147483648 && num<= 2147483647 );//error C4146: 一元負運算符應用於無符號類型,結果仍為無符號類型;
雖然我們都知道int的最小值是-2147483648,但在編譯器中使用,依然會報錯。 原理是:當VS2013在碰見int number = -2147483648;時候,首先判斷得到2147483648>int的最大值。就會使用 unsigned int,在根據前面有負號,會將值取對反。
解決方法:
進行宏定義 #define int_num (-2147483647-1)定義
改正代碼1:int number = int_num;
改正代碼2:if ( num >= int_num && num <= 2147483647 );