189 8069 5689

java二进制取反代码 二进制怎么取反码

Java基础,正数取反,各二进制码按补码各位取反;反码取反,各二进制码按补码各位取反。

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

成都网站设计、成都做网站、外贸网站建设介绍好的网站是理念、设计和技术的结合。创新互联建站拥有的网站设计理念、多方位的设计风格、经验丰富的设计团队。提供PC端+手机端网站建设,用营销思维进行网站设计、采用先进技术开源代码、注重用户体验与SEO基础,将技术与创意整合到网站之中,以契合客户的方式做到创意性的视觉化效果。

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中二进制怎么表示”

java中二进制的表示:

1、Java中定义两个数,然后分别打印出它们的二进制表示(例如7和-7):

System.out.println("Java二进制7: "+Integer.toBinaryString(7));

System.out.println("Java二进制-7: "+Integer.toBinaryString(-7));

输出:

Java二进制7: 111

Java二进制-7: 11111111111111111111111111111001

7的二进制就是111

-7转化二进制的过程:

(1)把-7转化成7,二进制是 111

(2)Java中对于不满32位的int二进制自动补齐,所以变成了 (29个0)111

(3)然后取反  (29个1)000

(4)然后加1 (29个1)001

扩展资料:

c语言中二进制的转换:

用函数转换itoa(值,数组名,进制)

#includestdio.h

#includestdlib.h

void main()

{

char str[8];

int i=8;

itoa(i,str,2);

printf("%s",str);

}

参考资料:

java二进制——百度百科

java中二进制-11的源码和反码是多少

正数的反码是其本身

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反

以8位为例

11 原码为 0000 1011

-11 原码为 1000 1011

-11 反码为 1111 0100


网站标题:java二进制取反代码 二进制怎么取反码
路径分享:http://cdxtjz.cn/article/hhpojd.html

其他资讯