成都创新互联网站制作重庆分公司

java代码二进制数取反 二进制取相反数

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

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

网站建设哪家好,找成都创新互联公司!专注于网页设计、网站建设、微信开发、小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了青白江免费建站欢迎大家使用!

java里面二进制 八进制 十进制 十六进制怎么互相转换,有什么规律?

=============(正)十进制转二进制

除二将余数倒置

eg: 127 /2

商:63 /2 31 /2 15 /2 7 /2 3 /2 1

余数:1 1 1 1 1 1

1111111

=============(负)十进制转二进制

1、先求负数绝对值的二进制

2、将得到的二进制完全取反+1

eg: -12

1、0000 1100

2、1111 0011 + 1 = 1111 0100

=============(正)十进制转八进制

除八将余数倒置

eg:54 /8 =66

6

6

=============(负)十进制转八进制

1、先将十进制转为二进制

2、再将二进制转为八进制

eg:-32

1、0010 0000

2、1110 0000

3、三位三位转

340

=============十进制转十六进制

1、先将十进制转为二进制

2、将二进制转为十六进制

=============二进制转为十进制

(正)二进制位上的各个数字乘以以2为底数,以自然数为次幂(自然数从0开始)

0110 1011 1*2^0 + 1*2^1 + 0*2^2 + 1*2^3 + 0*2^4 + 1*2^5 + 1*2^6 = 107

(负)

1、首先得到负号

2、将该二进制数取反+1

3、将得到的数转为十进制加上负号。

=============二进制转八进制

(1)将二进制三个三个分为一组,分别求出每组二进制的八进制值,将所得到的值依次排开

(2) 1、将二进制转为十进制

2、将十进制转为八进制

============二进制转十六进制

将二进制四个四个分为一组,分别求出每组二进制的十六进制值,将所得到的值依次排开

============八进制转二进制

(1)将八进制各个位上的数单个转为二进制,不足三位的补0

eg:127 001 010 111

(2) 1、将八进制转为十进制

2、再将十进制转为二进制

============八进制转十进制

八进制位上的各个数字乘以以8为底数,以自然数为次幂(自然数从0开始)

543 3*8^0 + 4*8^1 + 5*8^2 = 355

============八进制转十六进制

1、先将八进制转为二进制

2、再将所得的二进制转为十六进制

============十六进制转二进制

将十六进制各个位上的数单个转为二进制,不足四位的补0

eg:127 0001 0010 0111

============十六进制转其他进制

都需要先转为二进制,再转为其他进制

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中是使用补码来表示二进制数据的) 再变为原码就行了 负数的原码就是1XXXXX 第一位是符号位 后面是数值位

Java二进制反转

public class BinaryReverse

{

private static String s = null;

public static void main(String[] args)

{

BinaryReverse br = new BinaryReverse();

Scanner sc = new Scanner(System.in);

byte tempbyte;

System.out.println("请输入要反转的数字:");

s = sc.nextLine();

tempbyte = Byte.valueOf(s);

tempbyte = br.converse(tempbyte); //开始反转

System.out.println("翻反转后十进制: " + tempbyte);

}

public Byte converse(Byte c)

{

String binaryString = null;

StringBuffer needAdd = new StringBuffer();

binaryString = Integer.toBinaryString(Math.abs(c));

System.out.println(binaryString);

if (s.startsWith("-"))

{

if (binaryString.length() 8)

{

needAdd.append("1");

}

}

else

{

if (binaryString.length() 8)

{

needAdd.append("0");

}

}

for (int i = 0; i (7 - binaryString.length()); i++)

{

needAdd.append("0");

}

binaryString = needAdd.append(binaryString).toString();

System.out.println("原数二进制为: " + binaryString);

String reverseString = needAdd.reverse().toString();

System.out.println("反转后二进制为: " + reverseString);

if (s.startsWith("-"))

{

int i = 0;

for (int j =reverseString.length(),y = 0 ; j 1 ; j--,y++)

{

i = (int) (i + Integer.valueOf(reverseString.charAt(j-1)+"")*Math.pow(2,y));

}

if (reverseString.charAt(0) == '1')

{

i = -i;

}

return (byte)i;

}

return Byte.valueOf(reverseString,2);

}

}

不要忘了加分哦

java中按位取反运算的详解

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

比如楼主说的10

二进制表示就是00000000

00000000

00000000

00001010

取反后就是11111111

11111111

11111111

11110101

这在十进制中就是-11

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


文章名称:java代码二进制数取反 二进制取相反数
标题来源:http://cxhlcq.com/article/dodecge.html

其他资讯

在线咨询

微信咨询

电话咨询

028-86922220(工作日)

18980820575(7×24)

提交需求

返回顶部