Discuss / Java / 是我符号错了?

是我符号错了?

Topic source

//位运算

int y = 0 | 1;

int y1 = 0 & 1;

int y2 = ~1;

int y3 = 0 ^ 1;

System.out.println(y);

System.out.println(y1);

System.out.println(y2);

System.out.println(y3);

为什么y2的值是 -2 ???不应该是 0 么?

果然 自己 动手 敲一遍 就是 不一样 

之前看过 就以为 自己 会了 

百度 了 一下  说什么 补码 反码 晕了。。。。。。。。

不纠结 这个 东西了  从我 工作 一年的 经验 来看 基本用不上 这玩意 

为什么 工作一年了 还在 看这个 因为 我是真的真的 菜 

不说了 继续看吧。。。。

也许是 二进制的 0 1 取反呢

我查到的一片文章: https://blog.csdn.net/qq_34509230/article/details/79073553

因为计算时是以补码方式进行的,要得到十进制的转换为原码。

对于负数,先得到原码(最高位为1),然后取反码(除最高位符号位外按位取反),最后+1得到补码;而对于正数原码、反码、补码都是一样的

所以计算过程就是这样的:

1的二进制原补码:00000000  00000000  00000000  00000001

~1得到的补码为: 11111111   11111111    11111111     11111110

求该补码的原码,按照上面计算负数补码的过程反过来,

即首先将上面~1的补码-1.得到反码:11111111     11111111     11111111      11111101

然后对反码取反,得到原码:10000000  00000000  00000000  00000010

最高位符号位为1,表示负数,所以得到-2

不知道有没有说清楚,hhh


  • 1

Reply