关于JAVA 中取反问题

关于JAVA 中取反问题,第1张

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

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

比如

0000

0000

0000

0000

0000

0000

0000

0101是

5的

原码。

反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码

取反 *** 作指:原为1,得0;原为0,得1。(1变0

0变1)

比如:将5的二进制表达式的每一位取反,得

1111

1111

1111

1111

1111

1111

1111

1010

称:1111

1111

1111

1111

1111

1111

1111

1010

0000

0000

0000

0000

0000

0000

0000

0101

的反码。

反码是相互的,所以也可称:

1111

1111

1111

1111

1111

1111

1111

1010

0000

0000

0000

0000

0000

0000

0000

0101

互为反码。

补码:反码加1称为补码。

就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。

那么,5的补码为:

1111

1111

1111

1111

1111

1111

1111

1010

+

1

=

1111

1111

1111

1111

1111

1111

1111

1011

所以,-5

在计算机中的二进制表达为:

1111

1111

1111

1111

1111

1111

1111

1011

转换为十六进制:0xFFFFFFFB。

====================================

明白了上面的就可以理解怎么求

~i

int型储存32个二进制位,~这个符号是按位取反,就是求i的反码。

即得到1111

1111

1111

1111

1111

1111

1111

1010

上面这串二进制代表一个负数,将它转换成int型过程如下:

1111

1111

1111

1111

1111

1111

1111

1010-1

=

1111

1111

1111

1111

1111

1111

1111

1001

再求反:

0000

0000

0000

0000

0000

0000

0000

0110

这个值就是5的按位取反所得到的int整数的绝对值(注意:5按位取反得到的是负数)

所以转换为int型为:6

即:int型的i=5

取反后的结果为-6

按位取反就是每一位都取反,所谓取反就是1变0,0变1

比如楼主说的10

二进制表示就是00000000

00000000

00000000

00001010

取反后就是11111111

11111111

11111111

11110101

这在十进制中就是-11

而他的二进制原码表示就是-1011

我是这么理解的,如果按你说的,根据这种情况书上说两个衣服串相等时是false不等时是true说明!是先起作用的,也就是说先取反后进行比较,因为equals是判断前后是否相等,所以如果两个字符串相同,前面取反就是false


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

原文地址: http://outofmemory.cn/yw/11467550.html

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

发表评论

登录后才能评论

评论列表(0条)

保存