Java按位运算符^ - 位如何随机播放

时间:2013-01-31 05:56:25

标签: java int bit-manipulation

这是一个小例子。

    int a = 11; //1 0 1 1 is bit representation
    System.out.println(~a);

    Output: -12

据我所知,'〜'运算符反转位 - 即1 0 1 1现在应该是0 1 0 0因此输出应该是4.我缺少什么?

2 个答案:

答案 0 :(得分:5)

11未表示为1011,表示为: -

0000 0000 0000 0000 0000 0000 0000 1011

只是你不注意看到领先的0's。请记住,int是32位。

现在,~11将是: -

1111 1111 1111 1111 1111 1111 1111 0100

所以,这是一个负数。所以,把它作为2的补码你得到: -

0000 0000 0000 0000 0000 0000 0000 1011 // 1's complement
0000 0000 0000 0000 0000 0000 0000 1100 // 2's complement == -12

因此,你得到-12

答案 1 :(得分:0)

一个int比4更多的数字,它实际上比你放的更多。

计算机上的负数通常表示为以1开头。 a -1通常都是1,-2是.111111111111111110,-3是..1111111111111101等。

所以你得到的是一个负数,因为你将所有这些零改为了。

如果您想查看号码,请使用~a& 0xf

0xf会给你一个“掩码”... 000001111

任何与此相关的东西只会保留最后4位,其余的都将被清零。

很好的问题,很高兴看到人们仍在尝试/想到这些东西。

相关问题