关于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
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-12-10
Java
是有有符号整数都是用
补码
来表示
整数的
原码,反码,补码
都是本身。
负数的原码:
原码就是这个数二进制表示形式。
负数的反码:除最高位符号位0代表整数,1代表负数,其余各位取反。
负数的补码:反码+1。
5
原码:0000
0000
0000
0000
0000
0000
0000
0101
取反以后:1111
1111
1111
1111
1111
1111
111
1010
我说过,根据有符号运算,要转换成
补码的形式。因为最高位是1
所以要根据
负数
求补码
1.先求反码:1000
0000
0000
0000
0000
0000
0000
0101
2.求补码=反码+1:1000
0000
0000
0000
0000
0000
0000
0110
最高位代表符号位
1
表示负数,0
表示整数
所以结果是-6

java中源码反码补码与取反的理解
负数从反码转为补码,数值位加一。在Java中,~符号执行按位取反运算。例如,~5的值为-6,-5的值为4。运算逻辑为,先将数值转换为二进制,对每一位取反,得到的是补码,需要再次取补码才能得到原码。按位取反与反码不同。反码法中,正数原反补码相同,负数反码为原码除符号位外取反。而按位取反...

java编程 按位取反的问题
1:符号位是0,正数,所以后面的二进制位则表示大小,即正数的原码=其补码。如1表示出来则为00000001(我这里用八位来表示,也可以用16位或32位)2:符号位是1,负数,这时候需要把后面的数取反再加一(要问为什么?查一下资料吧,可以根据补码的特性推出来),所以11111110表示的数是1111110取反为0000...

Java操作中,~按位取反,对于1 (0001) 结果1110 为什么值是 -2 ?_百度...
0001取反是1110是显然的而1110是四位补码,最高位是符号位1代表负数,0代表正数后三位是实际的数值位,补码转化为原码要按照“数值位每位取反,末位加一”的原则,故后三位数值110取反加一得到010(原码)即十进制的2由于符号位为1代表负数,故结果为-2 ...

java中按位取反 ~5=-6为什么呀?
java中 ~5=-6 ,而这个-6是输出到屏幕上,我们看到的是-6。首先看对5求反,5的二进制原码是:0000 0101,取反之后是:1111 1010 ,得到的这个值在计算机中的存储原型也是 1111 1010,而要把这个结果显示出来,到计算机屏幕上就要转换成十进制,也就是说 1111 1010 是补码形式,补码 = 原码取反...

Java中位运算,对整数5按位取反怎么算
5:00000101取反:11111010因为数在计算机里是用补码形式存放的...所以要把11111010看做一段补码现在把补码转化为原码,第一位是符号..不用变..先变成反码..减1就可以..11111001再变为原码10000110,即-6 5&25:000001012:00000010与就是各个位做与运算..1&0=00&0=01&1=1结果就是00000000 ...

java中按位取反 ~5=-6是为什么?
那么,我们逆推回去,由负数(标志位是1,即首位是1)减去1,然后再取反,是不是就得到了负数的正数部分?\\x0d\\x0a\\x0d\\x0a5=00000101(B)\\x0d\\x0a对5取 ~5 = 11111010(B)(首位是1,说明是负数)\\x0d\\x0a然后减去1 = 11111001(B) \\x0d\\x0a然后取反 = 00000110(B) = 6(D)...

Java中位运算,对整数5按位取反怎么算
5:00000101取反:11111010因为数在计算机里是用补码形式存放的...所以要把11111010看做一段补码现在把补码转化为原码,第一位是符号..不用变..先变成反码..减1就可以..11111001再变为原码10000110,即-6 5&25:000001012:00000010与就是各个位做与运算..1&0=00&0=01&1=1结果就是00000000 ...

Java中位运算,对整数5按位取反怎么算
转二进制取反得到的也是-6 你再把它转成10进制数就能看到结果了 5(2) = 101 2(2) = 010 &是安位与,两个都是1才得1 所以上面5和2对应1的位数刚好叉开了,&后得到000,也就是0了

Java中位运算,对整数5按位取反怎么算
取反:11111010 因为数在计算机里是用补码形式存放的...所以要把11111010看做一段补码 现在把补码转化为原码,第一位是符号..不用变..先变成反码..减1就可以..11111001 再变为原码10000110,即-6 5&2 5:00000101 2:00000010 与就是各个位做与运算..1&0=0 0&0=0 1&1=1 结果就是00000000...

java怎么让一个正数变成负数
Java中可以通过不同的方式将一个正数变成负数。以下是几种常见的方法:1.使用负号将正数取反点击学习大厂名师精品课这是最简单的方式。直接在数字前加一个负号即可,例如:```intnum=10;intnegativeNum=-num;\/\/negativeNum将会是-10```2.通过减去2倍的值这种方法是将正数减去两倍的值,例如:```...

相似回答