【java面试题】二进制(详解,一看就会)

二进制

1.什么是二进制

二进制是一种数值表示系统,它使用两个符号表示数字:0和1。它是计算机系统的基础,因为计算机使用二进制数来进行数据存储和处理。在二进制中,每一位代表一个2的幂次方,比如:

  • 0 = 0×20 = 0

  • 1 = 1×20 = 1

  • 10 = 1×21+0×20 = 2

  • 11 = 1×21+1×20 = 3

  • 100 = 1×22+0×21+0×20 = 4

二进制概述以及其发展

在早期设计的机械计算装置中,使用的不是二进制,而是十进制或者其他进制,利用齿轮的不同位置表示不同的数值,这种计算装置可能更加接近人类的思想方式。比如说一个计算设备有十个齿轮,它们级连接起来,每一个齿轮有十格,小齿轮转一圈大齿轮走一格。这就是一个简单的十位十进制的数据表示设备了,可以表示0到999999999的数字。 配合其他的一些机械设备,这样一个简单的基于齿轮的装置就可以实现简单的十进制加减法了。

这种通过不同的位置上面不同的符号表示数值的方法就是进制表示方法。常用的进制主要是十进制(因为我们有十个手指,所以十进制是比较合理的选择),用手指可以表示十个数字。 电子计算机出现以后,使用电子管来表示十种状态过于复杂,所以所有的电子计算机中只有两种基本的状态,开和关。也就是说,电子管的两种状态决定了以电子管为基础的电子计算机采用二进制来表示数字和数据。

2.为什么计算机要用二进制

1、二进制运算规则简单

十进制乘法表:

二进制乘法规则:

  • 0*0 = 0

  • 0*1 = 0

  • 1*0 = 0

  • 1*1 = 1

乘法表的规则就有45种,二进制,乘法规则只有四种,肯定是采用规则越简单的东西,越便于计算机系统后续的扩展

2、技术上更容易实现

制造一个具有两种状态的元件是非常简单的,比如开关,闭合表示1,断开表示0。

3、可靠性高

二进制的1、0, 即使在数据传输中受到干扰,发生了变化,我们仍能够根据简单的规则将数据修改为原来的样子。比如传输的是001,但接收方收到的是000,那么我们可以使用奇偶校验的方式发现出错的位置。

从001变成000这个例子来看,一开始1的个数是奇数个,而后来接收方发现1的个数变成了偶数个(0),那么断定数据出错,这就是奇偶校验的基本原理。如果想要修改出错位置,那么就要精确定位,就要用到其他技术了。

4、便于逻辑门电路实现算数运算

二进制的0和1正好与逻辑量的”真“和”假“相对应,所以,使用二进制来描述二值逻辑就十分自然,逻辑门电路就能够利用0和1简化运算。

3.java十进制二进制互转

进制转化在JAVA中已经封装好了,无论是常规的10转2,8,16,还是相对应的2,8,16进制转化为10进制的方法,都被封装在Integer对象中.

10进制转化其他进制对应的方法,参数:n(原10进制数据),r(进制),返回值
10进制转2进制Integer.toBinaryString(n);一个二进制字符
10进制转8进制Integer.toOctalString(n);一个八进制字符串
10进制转16进制Integer.toHexString(n);一个16进制字符串
10进制转 r 进制Integer.toString(n, r);一个r进制字符串

十进制转二进制

Integer.toBinaryString()方法

这是Integer类的另一种方法,可以直接将十进制转换为二进制。请参阅下面的程序以了解如何使用它。

import java.util.Scanner;

public class Java10to2Demo1 {
    public static void main(String args[]){
        int number;
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个十进制数字: ");
        number = sc.nextInt();

        System.out.println("转化为二进制输出为:" + Integer.toBinaryString(number));
    }
}

Integer.toString()方法

我们可以使用Integer类的toString()方法将十进制数转换为二进制数。此方法有两个参数,第一个参数是十进制数,第二个参数是我们要转换的基数。对于二进制,基数为2。

import java.util.Scanner;
  
 public class Java10to2Demo1 {
 public static void main(String args[]){
 int number;
 Scanner sc = new Scanner(System.in);
  
 System.out.println("请输入一个十进制数字: ");
 number = sc.nextInt();
  
 System.out.println("转化为二进制输出为: " + Integer.toString(number, 2));
 }
 }

用自己的逻辑写一个程序

十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用十进制整数除以2,可以得到一个商和余数;再用商去除以2,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

我们可以在Java中编写自己的逻辑,将十进制转换为二进制。可以通过以下步骤完成。

  1. 使用%运算符将数字除以2,并将剩余的数存储在某个位置。

  2. 使用/运算符将数字除以2。

  3. 重复上述两个步骤,直到数字变为0。

  4. 现在,以相反的顺序打印其余部分。

import java.util.Scanner;

public class Java10to2Demo3 {
    public static void main(String[] args) {


        int number;
        String s = "";
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个十进制数字: ");
        number = sc.nextInt();
        while (number!=0){
            s = s+number%2;
            number = number/2;
        }
        //定义成一个StringBuffer类,用StringBuffer类中的reverse()方法直接倒序字符串
        StringBuffer buff = new StringBuffer(s);
        System.out.println("转化为二进制为:"+buff.reverse());
    }
}

二进制转十进制

Integer.parseInt()方法采用两个参数。 第一个参数是一个字符串,第二个参数是我们必须在其中转换数字的基数。 输出是由指定基数中的字符串参数表示的整数。

r进制转10进制方法
r进制的字符串s转10进制Integer.parseInt((String) s,(int) r);

Integer.parseInt()方法

import java.util.Scanner;

public class Java2to10Demo1 {

    public static void main(String[] args) {

        String s;
        Scanner sc = new Scanner(System.in);

        System.out.print("请输入一个二进制数字: ");
        s = sc.nextLine();
        System.out.println("转化为十进制输出为:"+Integer.parseInt(s,2));

    }
}

用自己的逻辑写一个程序

由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。

我们可以在Java中编写自己的逻辑,将二进制转换为十进制。可以通过以下步骤完成。

  1. 使用%运算符将数字除以10,并将剩余的数存储在某个位置。

  2. 余数*2位数相加

  3. 使用/运算符将数字除以10。

  4. 重复上述三个步骤,直到数字变为0。

import java.util.Scanner;

public class Java2to10Demo2 {
    public static void main(String[] args) {

        int number,result = 0,i = 0;
        Scanner input = new Scanner(System.in);
        System.out.print("请输入一个二进制数:");
       number = input.nextInt();
       //Math.pow(5,4) = 5的4次方    返回值类型为double,需要强转
       while (number!=0){
           result = (int)(result+number%10*Math.pow(2,i));
           number = number/10;
           i++;
       }
        System.out.println("转化为十进制输出结果为"+result);
    }
}

  • 37
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值