我尝试使用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值.
你有一个32位二进制补码系统.所以 - a = 0
很简单. ~a
是0xffffffff
.在32位二进制补码表示中,0xffffffff
是-1
.基本代数解释说,这-(-1)
就是1
你的第一个打印出来的地方. INT_MAX
是0x7fffffff
.
您的逻辑错误在此声明中:" - (1111)=> 0111 ",这不是真的.对于二进制补码数的算术否定运算相当于~x+1
- 例如:
~x + 1 = ~(0xffffffff) + 1
= 0x00000000 + 1
= 0x00000001
Run Code Online (Sandbox Code Playgroud)