Java最高

通过。开始使用Spring 5和Spring Boot 2学习的春天课程:

>>查看课程

1.介绍

二进制数字系统用0和1来表示数字。计算机使用二进制来存储和执行任何数据的操作。

在本教程中,我们将学习如何将二进制转换为十进制,反之亦然。同时,我们将对它们进行加减运算。

2.二进制文字

Java 7引入了二进制文字。它简化了二进制数的使用。

要使用它,我们需要在号码前加上0B或0B:

@Test public void given_binaryLiteral_thenReturnDecimalValue(){字节5 = 0b101;assertequal((字节)5、5);短三= 0b11;assertequal((短)3,三个);int 9 = 0B1001;assertequal(9、9);long twenty - nine = 0B11101;进行assertequal(29日);int minus37 = -0B100101;minusThirtySeven assertequal (-37); }

3.二进制数转换

在本节中,我们将学习如何将二进制数转换为十进制格式,反之亦然。在这里,我们将首先使用一个内置的Java函数进行转换,然后我们将为此编写自定义方法。

3.1。十进制变为二进制数

整数有一个名为toBinaryString将一个十进制数转换为它的二进制字符串:

@Test public void given_decimalNumber_then_convertToBinaryNumber() {assertEquals("1000", Integer.toBinaryString(8));assertequal(“10100”,Integer.toBinaryString (20);}

现在,我们可以为这个转换编写我们自己的逻辑。在编写代码之前,让我们首先了解如何将一个十进制数转换为二进制数。

转换一个十进制数n为它的二进制格式,我们需要:

  1. n除以2,注意商,其余r
  2. 除以2,注意它的商和余数
  3. 重复第2步,直到我们得到0作为商
  4. 按相反顺序连接所有余数

让我们看一个将6转换成它的二进制格式的例子:

  1. 首先,6除以2:商3,余数为0
  2. 然后,用3除以2:商1余数1
  3. 最后,1除以2,商0余数1
  4. 110

现在我们来实现上面的算法:

public Integer convertDecimalToBinary(Integer decimalNumber) {if (decimalNumber == 0) {return decimalNumber;} StringBuilder binaryNumber = new StringBuilder();整数商= decimalNumber;while(商> 0){int remainder =商% 2;binaryNumber.append(剩余部分);商/ = 2;} binaryNumber = binaryNumber.reverse();返回Integer.valueOf (binaryNumber.toString ());}

3.2。由二进制变为十进制数

要解析一个二进制字符串,使用整数类提供了一个方法用于功能:

@Test public void given_binaryNumber_then_ConvertToDecimalNumber() {assertEquals(8, Integer。方法(" 1000 ",2));assertequal(20,整数。方法(" 10100 ",2));}

在这里,方法用于函数接受两个参数作为输入:

  1. 要转换的二进制字符串
  2. 输入字符串必须转换的数字系统的基数或基数

现在,让我们试着写出我们自己的逻辑来把一个二进制数转换成十进制:

  1. 从最右边的数位开始
  2. 每个数字乘以2^{position} -在这里,最右边的数字的位置是零,它会随着我们移动到左边而增加
  3. 把所有乘法的结果相加得到最后一个小数

再一次,让我们看看我们的方法的实际效果:

  1. 首先,101011 = (1 * 2 ^ 5)+ (0 * 2 ^ 4)+ (1 * 2 ^ 3)+ (0 * 2 ^ 2)+ (1 * 2 ^ 1)+ (1 * 2 ^ 0)
  2. 接下来,101011 = (1 * 32)+ (0 * 16)+ (1 * 8)+ (0 * 4)+ (1 * 2)+ (1 * 1)
  3. 那么,101011 = 32 + 0 + 8 + 0 + 2 + 1
  4. 最后,101011 = 43

让我们最终编写上述步骤:

public Integer convertBinaryToDecimal(Integer binaryNumber) {Integer decimalNumber = 0;整数基数= 1;while (binaryNumber > 0) {int lastDigit = binaryNumber % 10;binaryNumber = binaryNumber / 10;decimalNumber += lastDigit * base;基数=基数* 2;}返回decimalNumber;}

4.算术运算

在本节中,我们将集中于对二进制数执行算术运算。

4.1。除了

就像小数加法一样,我们从最右边的数开始相加。

当两个二进制数字相加时,我们需要记住以下规则:

  • 0 + 0 = 0
  • 0 + 1 = 1
  • 1 + 1 = 10
  • 1 + 1 + 1 = 11

这些规则可以实现为:

public Integer addBinaryNumber(Integer firstNum, Integer secondNum) {StringBuilder output = new StringBuilder();int进位= 0;int温度;while (firstNum != 0 || secondNum != 0) {temp = (firstNum % 10 + secondNum % 10 + carry) % 2;output.append(临时);carry = (firstNum % 10 + secondNum % 10 + carry) / 2;firstNum = firstNum / 10;secondNum = secondNum / 10;} if(进位!= 0){output.append(进位);.toString}返回Integer.valueOf (output.reverse () ()); }

4.2。减法

二进制数的减法有很多种。在这一节中,我们将学习做减法的一种补法。

我们先来理解一个数的补数是什么。

一个数的补数是由对二进制数的每一位求反。这意味着用0代替1,用1代替0:

public Integer getOnesComplement(Integer num) {StringBuilder onesComplement = new StringBuilder();while (num > 0) {int lastDigit = num % 10;if (lastDigit == 0) {onesComplement.append(1);} else {onescomplementary .append(0);} num = num / 10;.toString}返回Integer.valueOf (onesComplement.reverse () ());}

要用一个二进制数的补数做两个二进制数的减法,我们需要:

  1. 计算减数的补数年代
  2. 添加年代和被减数
  3. 如果在步骤2中生成了一个进位,那么将这个进位加到步骤2的结果中,就会得到最终的答案。
  4. 如果在步骤2中没有生成进位,那么步骤2结果的1的补数就是最终答案。但在这种情况下,答案是否定的

让我们来实现上面的步骤:

public Integer substractBinaryNumber(Integer firstNum, Integer secondNum) {int onesComplement = Integer. valueof (getOnesComplement(secondNum));StringBuilder输出= new StringBuilder();int进位= 0;int温度;while (firstNum != 0 || onesComplement != 0) {temp = (firstNum % 10 + onesComplement % 10 + carry) % 2;output.append(临时);firstNum % 10 + onesComplement % 10 + carry = (firstNum % 10 + 1) / 2;firstNum = firstNum / 10;onesComplement = onesComplement / 10;} String additionOfFirstNumAndOnesComplement = output.reverse().toString(); if (carry == 1) { return addBinaryNumber(Integer.valueOf(additionOfFirstNumAndOnesComplement), carry); } else { return getOnesComplement(Integer.valueOf(additionOfFirstNumAndOnesComplement)); } }

5.结论

在本文中,我们学习了如何将二进制数转换为十进制数,反之亦然。然后,我们对二进制数进行加法和减法等算术运算。

本文中使用的完整代码可以在上找到GitHub

Java底部

通过。开始使用Spring 5和Spring Boot 2学习的春天课程:

>>查看课程
本文评论关闭!