java取反有什么意义(Java 取反运算符)
很多朋友对于java取反有什么意义和Java 取反运算符不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
java中按位取反 ~5=-6是为什么
你用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
java中按位取反 ~4=5 怎么算的 求具体步骤
按位取反,包括高位。(要根据8421码来看)
~是位运算符也叫单目运算符,直接操作的是二进制。
4是int类型
4的原码(也是补码、反码):
00000000 00000000 00000000 00000100
运算以补码运算的。
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中按位取反 ~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 取反运算符
用以下代码可以实现你要求的功能:
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取反有什么意义和Java 取反运算符的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。