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

posted on 2016-11-28 10:05  Tilefish  阅读(3950)  评论(0编辑  收藏  举报