使用tilde获取int的MAX值

kr8*_*r85 5 c c++ memory

我尝试使用tilde获取int的MAX值.但是输出不是我所期望的.当我运行这个:

#include <stdio.h>
#include <limits.h>
int main(){
    int a=0;
    a=~a;
    printf("\nMax value: %d",-a);
    printf("\nMax value: %d",INT_MAX);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到输出:

最大值:1

最大值:2147483647

我想,(例如)如果我在RAM中有0000(我知道第一位显示的是数字pozitiv或negativ).在~ 0000 => 1111之后和 - (1111)=> 0111之后,我将获得MAX值.

Car*_*rum 9

你有一个32位二进制补码系统.所以 - a = 0很简单. ~a0xffffffff.在32位二进制补码表示中,0xffffffff-1.基本代数解释说,这-(-1)就是1你的第一个打印出来的地方. INT_MAX0x7fffffff.

您的逻辑错误在此声明中:" - (1111)=> 0111 ",这不是真的.对于二进制补码数的算术否定运算相当于~x+1- 例如:

~x + 1 = ~(0xffffffff) + 1
       = 0x00000000 + 1
       = 0x00000001
Run Code Online (Sandbox Code Playgroud)