0

我写了一个简单的程序,其中我有一个按位运算符,它在 java 中给出了带符号的值。但是当我这样做时,它返回的值高于原始值。

class bit
{

public static void main(String[] args)
{


int j=10;

System.out.println("jjjj"+~j);

}

}

给出的输出有:

-11。预期的输出应该是-9。问题是什么?

4

2 回答 2

1

如果我们查看数字 10 的二进制文件,我们可以看到

0000 0000 0000 0000 0000 0000 0000 1010

其中第一个 0 是签名位。

如果我们现在翻转包含签名位的二进制文件,我们得到

1111 1111 1111 1111 1111 1111 1111 0101

其中...如果您认为java使用有符号整数,则为-11。

如果我们离开有符号数字一秒钟,只考虑一个 4 字节无符号整数的值 ~10,我们得到的值是:4294967285。

要将无符号整数转换为二进制补码有符号整数,如果整数超过 2^31 - 1,我们从整数中减去 2^32 的值。

2^32 - 4294967285 = -11

于 2013-09-29T15:38:59.517 回答
1
0000 1010 // = 10 i.e binary representation of 10
1111 0101 // = ~10 i.e inversion of bits

负数以 2 的补码形式存储。检查此以获取详细信息

0000 1011 // = 11 i.e binary 11
1111 0100 // inversion of bits
1111 0101 // 2's complement of 11 = -11

因此,

~10 = -11

于 2013-09-29T15:39:44.737 回答