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

问题描述 投票:0回答:2

这里有一个小例子。

    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。我缺少什么?

java int bit-manipulation
2个回答
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


0
投票

一个int比4多很多,它实际上要比您输入的多一堆0。

计算机上的负数通常表示为以1开头。 a -1通常是全1,-2是..11111111111111110,-3是..1111111111111101,依此类推。\

所以您得到的是一个负数,因为您将所有这些零都更改为1。

如果要查看您的电话号码,请使用〜a&0xf

0xf将为您提供... 000001111的“掩码”>

与之并存的所有内容将仅保留最后4位,其余所有位将被清零。

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

© www.soinside.com 2019 - 2024. All rights reserved.