我创建了一个int型变量my_int_min,并对他赋值为INT_MIN,可以得到:
my_int_min=-my_int_min=INT_MIN=-INT_MIN=-2147483648
所以,我预测表达式 !(-my_int_min&INT_MIN)
的值应该为0,但实际运算结果为1,更加让我不理解的是表达式 !(-my_int_min&my_int_min)
的值为0。这是为什么呢?
代码如下:
#include <limits.h>
int my_int_min = INT_MIN;
printf("INT_MIN=%d\t my_int_min=%d\t -INT_MIN=%d\t -my_int_min=%d\n", INT_MIN, my_int_min, -INT_MIN, -my_int_min);
printf("!(-INT_MIN&INT_MIN)=%d\t !(-my_int_min&INT_MIN)=%d\n", !(-INT_MIN&INT_MIN), !(-my_int_min&INT_MIN));
printf("!(-INT_MIN&my_int_min)=%d\t !(-my_int_min&my_int_min)=%d\n", !(-INT_MIN&my_int_min), !(-my_int_min&my_int_min));
运行结果截图:
又进行了测试:
printf("(-my_int_min&INT_MIN)=%d\t !(-my_int_min&INT_MIN)=%d\n", (-my_int_min&INT_MIN), !(-my_int_min&INT_MIN));
运行结果:
为什么逻辑非会出错呢?