java中按位取反 ~5=-6为什么呀?
发布网友
发布时间:2022-05-15 01:43
我来回答
共5个回答
热心网友
时间:2023-11-21 14:39
这是因为整数在计算机中是二进制存储的。
java中 ~5=-6 ,而这个-6是输出到屏幕上,我们看到的是-6。
首先看对5求反,
5的二进制原码是:0000 0101,
取反之后是:1111 1010 ,得到的这个值在计算机中的存储原型也是 1111 1010,而要把这个结果显示出来,到计算机屏幕上就要转换成十进制,也就是说 1111 1010 是补码形式,
补码 = 原码取反 + 1。
补码要换算成对应的十进制就是
原码取反 = 补码 -1
所以 1111 1010 - 1 = 1111 1001, 然后再对 1111 1001 取反,得到 1000 0110,
所以 原码就是 1000 0110,对应的十进制就是 -6。
同样的,这样看也行:
-6在计算机中的存储为二进制补码形式,也就是说-6的补码是 1000 1010 (-6的二进制原码是:1000 0110,源码取反之后是 1111 1001,再加上1就是 1111 1010,这就是补码了)。
热心网友
时间:2023-11-21 14:39
首先要明确,取反是二进制操作
下面以5为例:
二进制原码:0000 0000 0000 0000 0000 0000 0000 0101
取反操作后:1111 1111 1111 1111 1111 1111 1111 1010
而在Java中,有符号整数都是用补码来表示,而补码=反码+1
1.先求反码:1000 0000 0000 0000 0000 0000 0000 0101
2.再求补码:1000 0000 0000 0000 0000 0000 0000 0110
最高位代表符号位 1 表示负数,0 表示正数 所以结果是-6
热心网友
时间:2023-11-21 14:40
你用4位表示太少了,没法表示标志位。你可以用8位试试
首先给你讲讲负数是怎么存2进制的,就是将其正数部分取反后+1。那么,我们逆推回去,由负数(标志位是1,即首位是1)减去1,然后再取反,是不是就得到了负数的正数部分?
5=00000101(B)
对5取 ~5 = 11111010(B)(首位是1,说明是负数)
然后减去1 = 11111001(B)
然后取反 = 00000110(B) = 6(D) 这就是结果的正数部分
你算一下最后的结果11111010(B)的正数部分是不是6呢?所以嘛~5=-6
热心网友
时间:2023-11-21 14:40
~5 这个你就别纠结于电子位的标示了,只要记住求 “~” 的时候,先给原数字加1,然后取反方向就行了。这个都已经有总结出来的现成的计算方法了,就像数学公式一样,有必要自己去移动么?
比如~5,5+1=6,取反方向,就是-6。
再比如 ~(-4),-4+1=-3,反方向,就是3。
热心网友
时间:2023-11-21 14:41
首先你要知道现在我们用的多数都是32位机,所以整形数都是4个字节
那么再看看按位取反的结果:
00000000 00000000 00000000 00000101 这是5
00000000 00000000 00000000 00000000 这是0
11111111 11111111 11111111 11111111 这是-1
11111111 11111111 11111111 11111110 这是-2
11111111 11111111 11111111 11111101 这是-3
11111111 11111111 11111111 11111100 这是-4
11111111 11111111 11111111 11111011 这是-5
11111111 11111111 11111111 11111010 这是5取反的结果-6
参考资料:http://zhidao.baidu.com/question/34278424