首页编程java编程java取反是什么意思(Java 取反运算符)

java取反是什么意思(Java 取反运算符)

编程之家2023-10-11128次浏览

本篇文章给大家谈谈java取反是什么意思,以及Java 取反运算符对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

java取反是什么意思(Java 取反运算符)

java中按位取反 ~4=5 怎么算的 求具体步骤

按位取反,包括高位。(要根据8421码来看)

~是位运算符也叫单目运算符,直接操作的是二进制。

4是int类型

java取反是什么意思(Java 取反运算符)

4的原码(也是补码、反码):

00000000 00000000 00000000 00000100

运算以补码运算的。

java取反是什么意思(Java 取反运算符)

4是正数,正数的原码、反码、补码都是一样

对4取反(包括高位,参考4的反码取反):

11111111 11111111 11111111 11111011

System.out.println(~4)//结果为什么是-5呢?

11111111 11111111 11111111 11111011意思是这个取反的结果代表-7,是-7的补码,

根据补码先求反码,再求原码。

证明它是-5就可以了。

先求反码(减1)

11111111 11111111 11111111 11111011

- 00000000 00000000 00000000 00000001

--------------------------------------------

11111111 11111111 11111111 11111010

再根据反码求原码。

负数的反码是对其原码逐位取反,

但!但符号位除外!

-5的原码:(用8421码看结果)

10000000 00000000 00000000 00000101

最高位是1,代表负数。

最高位是0,代表正数。

最终结果为(-5)

取反运算是什么意思

取反,是Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。

1、正数取反,先将初始数值转换成二进制数,再对二进制数的每一位进行运算:将0变为1、将1变为0。得到的是最终结果的补码,要转换为最终结果的原码则需再次取补码,就能得到计算结果。

2、负数取反,先将初始数值转换成二进制数,再取得二进制数的补码,之后对补码的每一位进行运算:将0变为1、将1变为0。得到的是最终结果的补码,要转换为最终结果的原码则需再次取补码,就能得到计算结果。

Java 取反运算符

用以下代码可以实现你要求的功能:

long lang=64509;

String str1=Long.toBinaryString(lang);//将给定的数转为二进制字串

String str2=Long.toBinaryString(~lang);//将给定的数取反转为二进制字串

//将取反后的二进制串取最后的长度与第一个串长度相等的子串,这是我们需要的二进制串

String str=str2.substring(str2.length()-str1.length());

//将它转换为十进制整数

int i=Integer.parseInt(str, 2);

System.out.println(i);

具体理论知识如下所示:

先要理解一些概念:

在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

java中按位取反 ~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中垃圾回收有什么目的什么时候进行垃圾回收c中%和java取余%有什么区别(C语言中与%的区别)