JAVA中“~”按位取反运算符的一些问题。

JAVA中“~”按位取反运算符的一些问题。,第1张

首先你要知道现在我们用的多数都是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

看懂了吗?

在2进制中,负数是以它正值的补码形式表达

原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。

比如 0000 0000 0000 0000 0000 0000 0000 0101是 5的 原码。

无符号的32bit整型最大值的二进制编码

有符号32bit二补码编码整型的-1的二进制编码

是一样的,就是说有不少前提。

Java的int是有符号的,只有int被当成无符号的时候,比如转成long的低32bit,

这时32bit最大值和和int的-1的二进制编码一样。

得看你的数据类型了,比如说你写12,默认的就是int的12

int是32位的

12=00000000 00000000 00000000 00001100

~12=11111111 11111111 11111111 11110011

第二个问题,有符号整数是按照最高位判断正负的(java中的数值除了char都是有符号的,都符合这个规则),如果x最高位是1,那么该数是负数,其值为 -((~x)+1),因此

11111111 11111111 11111111 11111111作为int型的话,因为最高位为1,所以其值为 -(0+1)=-1

根据上面的理论,~12=-(~(~12)+1)=-13

你用4位表示太少了,没法表示标志位。你可以用8位试试\x0d\首先给你讲讲负数是怎么存2进制的,就是将其正数部分取反后+1。那么,我们逆推回去,由负数(标志位是1,即首位是1)减去1,然后再取反,是不是就得到了负数的正数部分?\x0d\\x0d\5=00000101(B)\x0d\对5取 ~5 = 11111010(B)(首位是1,说明是负数)\x0d\然后减去1 = 11111001(B) \x0d\然后取反 = 00000110(B) = 6(D) 这就是结果的正数部分\x0d\你算一下最后的结果11111010(B)的正数部分是不是6呢?所以嘛~5=-6

这是因为整数在计算机中是二进制存储的。

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,这就是补码了)。

以上就是关于JAVA中“~”按位取反运算符的一些问题。全部的内容,包括:JAVA中“~”按位取反运算符的一些问题。、求java中是否有对数值取反的函数、java中取反 *** 作是正数取反=正数+1取负 负数取反=负数+1取正,那么-1取反是等于0嘛等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9836317.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存