我创建了一个整数my_int_min并分配了值INT_MIN,
my_int_min = -my_int_min = INT_MIN = -INT_MIN = -2147483648
Run Code Online (Sandbox Code Playgroud)
应该是有效的。所以,我预测表达式的!(-my_int_min & INT_MIN)值应该是0,但实际运行结果是1。
我发现!(-my_int_min&my_int_min)等于0并且(-my_int_min&INT_MIN)等于-2147483648。为什么!(-my_int_min & INT_MIN)不等于0?代码如下。
#include <stdio.h>
#include <limits.h>
int main()
{
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));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
INT_MIN=-2147483648 my_int_min=-2147483648 -INT_MIN=-2147483648 -my_int_min=-2147483648
!(-INT_MIN&INT_MIN)=0 !(-my_int_min&INT_MIN)=1
!(-INT_MIN&my_int_min)=0 !(-my_int_min&my_int_min)=0
(-my_int_min&INT_MIN)=-2147483648 !(-my_int_min&INT_MIN)=1
Run Code Online (Sandbox Code Playgroud)