小编WXl*_*Xll的帖子

为什么对值为 -2147483648 的表达式进行逻辑非运算会产生 1?

我创建了一个整数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)

c c++ gcc

-1
推荐指数
1
解决办法
118
查看次数

标签 统计

c ×1

c++ ×1

gcc ×1