「java取反码」Java 取反

博主:adminadmin 2022-11-25 06:11:07 83

今天给各位分享java取反码的知识,其中也会对Java 取反进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Java中取反是怎么算的

5:00000101

取反:11111010

因为数在计算机里是用补码形式存放的...所以要把11111010看做一段补码

现在把补码转化为原码,第一位是符号..不用变..先变成反码..减1就可以..11111001

再变为原码10000110,即-6

52

5:00000101

2:00000010

与就是各个位做与运算..

10=0

00=0

11=1

结果就是00000000

关于JAVA 中取反问题

在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中按位取反运算的详解

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

比如楼主说的10

二进制表示就是00000000

00000000

00000000

00001010

取反后就是11111111

11111111

11111111

11110101

这在十进制中就是-11

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

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基础,正数取反,各二进制码按补码各位取反;反码取反,各二进制码按补码各位取反。

乱七八糟。按专业角度说,为了解决把二进制整数减法(或负数运算)转换成加法来算的问题(所以你只听过累加器,而没有累减器),就发明了原码,反码,补码。比如一个-2,假设它是八位长度的,原码就是10000010,最高位1表示这是一个负数。反码是11111101,就是除符号位以外把原码各位都取反。补码就是反码加1,即11111110。正数2的补码规定为自身,即00000010。现在把两个数的补码相加,11111110+00000010=100000000。前面我们已假设是在八位字长的环境下运算,现在算出了九位,这样就溢出了,即在八位环境下看,第九位的1是不存在的,结果是00000000,即0。这和我们算2-2的结果是一样的,这就实现了把减法转为加法。另外,java还规定了几个运算,把二进制数作与,或,非,异或,移位等运算,这些都与上面说的三种码没有直接关系,不要弄混了

java取反码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Java 取反、java取反码的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-25,除非注明,否则均为首码项目网原创文章,转载请注明出处。