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 );