java按位取反(java取反什么意思)
关于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中按位取反 ~4=5 怎么算的 求具体步骤
正数的补码为0100
然后取反 1011,我们知道反码+1=补码,反码就为补码-1,也就是1010,然后取反0101,值已经出来了为5,符号位看补码,补码最高位为0代表正数,最高位为1代表负数,所以答案应该是-5,而不是5
(值多少看原码,符号位看补码)
Java中位运算,对整数5按位取反怎么算
5:00000101
取反
:11111010
因为数在计算机里是用
补码
形式存放的...所以要把11111010看做一段补码
现在把补码转化为
原码
,第一位是符号..不用变..先变成
反码
..减1就可以..11111001
再变为原码10000110,即-6
52
5:00000101
2:00000010
与就是各个位做与运算..
10=0
00=0
11=1
结果就是00000000
JAVA中的按位取反什么意思
按位取反
~ 01101101
10010010
结论:对二进制数按位取反,即0变成1,1变成0。