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

article/2025/8/11 9:38:35

二进制

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);}
}


http://www.hkcw.cn/article/grnilMvFRe.shtml

相关文章

Java 2.4 - JVM

一、Java 内存区域详解(重点) 本篇讨论的是 HotSpot 虚拟机 相比于 C 而言,程序员不需要对每个 new 操作都写对应的 delete / free 操作,这些操作我们会交给虚拟机去做。因此,如果不了解虚拟机的原理,一旦…

java面试-- 必问之jvm与性能优化(一)

问题一、 描述一下 JVM 加载 Class 文件的原理机制? JVM(Java虚拟机)加载Class文件的原理机制是Java程序运行的关键组成部分。这一过程涉及到多个阶段,确保Java程序能够跨平台运行,并动态地加载、解析和执行Java Class文件。以下…

JVM运行时数据区之虚拟机栈

【1】概述 Java虚拟机栈(Java Virtual Machine Stack),早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用。 栈是运行…

【Linux探索学习】第三十二弹——生产消费模型:基于阻塞队列和基于环形队列的两种主要的实现方法

Linux学习笔记: https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言: 在前面我们已经学习了关于线程的主要知识,包括线程的基础知识以及线程的同步与互斥等内容,今天我们来学几个线程知…

复现FAST_LIVO2【Ubuntu 20.04.6 LTS】

目录 准备1 Ubuntu 和 ROS2 其他库2.1 PCL2.2 Eigen2.3 OpenCV 3 Sophus3.1 安装3.2 make报错 4 Vikit5 livox_ros_driver5.1 Livox-SDK5.2 livox_ros_driver FAST-LIVO2运行参考 准备 1 Ubuntu 和 ROS 依据开源介绍,Ubuntu 16.04~20.04。 复现版本为:…

【基于Ubuntu下Yolov5的目标识别】保姆级教程 | 虚拟机安装 - Ubuntu安装 - 环境配置(Anaconda/Pytorch/Vscode/Yolov5) |全过程图文by.Akaxi

目录 一.【YOLOV5算法原理】 1.输入端 2.Backbone 3.Neck 4.输出端 二.【系统环境】 1.虚拟机的安装与创建 2.安装Ubuntu操作系统 3.环境的配置 3.1.Ubuntu下Anacoda安装以及虚拟环境配置 3.2.Pytorch安装 3.3.Vscode安装 3.4.Yolov5源码及环境获取安装…

[已解决] 本地两台 win电脑 (以太网) 网线传输文件 - 局域网连接 (解决windows无法访问共享文件问题 - Windows 安全中心输入网络凭据 用户名/密码 不正确问题)

背景 由于要本地传输的数据比较大,大几百GB网盘传输慢,正好有网线,试着本地网线高速传输(实测113MB/s)踩了很多坑,想把亲测成功的经验分享出来帮助更多同学 目录 1 网线接入 2 设置两台电脑的IP地址 3 …

Docker(三):DockerFile

一、DockerFile介绍 1、DockerFile 介绍 DockerFile 是一种能够被Docker 程序解释的文件(一般为了方便理解称之为“剧本”)。 DockerFile 由一条一条的指令组成,并且有自己的书写格式和支持的命令。当我们需要在容器 镜像中指定自己额外的需…

【Linux网络编程】第十弹---打造初级网络计算器:从协议设计到服务实现

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、Protocol.hpp 1.1、Request类 1.1.1、基本结构 1.1.2、构造析构函数 1.1.3、序列化函数 1.1.4、反…

Ubuntu24安装Docker详细教程

目录 Ubuntu 安装 Docker 详细教程 一、安装环境说明 二、卸载旧版 Docker(若存在) 三、安装必要的依赖 四、添加 Docker 的 GPG 密钥 五、配置 Docker 的软件源 六、安装 Docker docker-compose离线安装 七、验证 Docker 是否安装成功 八、配置…

2024第八届御网杯信息安全网络大赛线上WP详解(misc+cryoto)(详解-思路-脚本)

芜湖~ 首届御网杯线上和ISCC分开进行 但还是用的ISCC的页面差评 嘻嘻 又是玄乎的一天 以下是我自己的一些思路和解析 有什么问题或者建议随时都可以联系我 目录 附件 # Misc ##Notice ##编码转换 Brainfuck编码 jsfuck编码 Ook! 编码 ##bluetooth 导出压缩包 第一…

在Linux中安装、配置和挂载NFS的完整指南

一、NFS简介 NFS(Network File System) 是一种分布式文件系统协议,允许用户通过网络在不同主机间共享文件和目录。它适用于局域网环境,常用于服务器集群、数据共享等场景。本文详细介绍NFS服务端与客户端的安装、配置及挂载流程。…

Linux-Ubuntu下的git安装与配置

一、安装git 1.打开终端,运行以下命令(需要联网) sudo apt-get update sudo apt-get install git 2.验证安装 安装完成之后,通过运行以下命令验证git是否已经正确安装: git --version 二、配置git 2.1.配置用户名…

亲测可用:wsl2安装ubuntu22.04的GNOME桌面

本文主要介绍wsl安装的ubuntu如何配置图形化桌面,主要使用与windows操作系统环境,方便搭建Linux环境下的可视化开发环境,网上流传的很多教程都不能正确安装,以下是本人亲自验证可用的操作方法。 1、开始安装 1.1 配置源 sudo v…

个人健康中枢的多元化AI网络革新与精准健康路径探析

引言 随着数字化转型的深入推进,个人健康中枢作为集成化健康管理系统,正在从传统的单一功能向多元化的AI驱动方向快速发展。在这一背景下,新兴网络硬件技术,特别是DPU(数据处理单元)和全光网络的出现,为个人健康中枢的革新提供了前所未有的机遇。本研究将深入探讨这些技…

Linux《进程控制》

在之前的Linux《进程概念》当中我们已经了解了进程基本的概念,那么接下来在本篇当中我们将开始进程控制的学习;在本篇当中我们先会对之前的学习的创建子进程的系统调用fork再进行补充了解,并且再之后会重点的学习进程的终止、进程等待以及进程…

Java应用中 慢SQL导致内存无法回收,然后导致线程阻塞,CPU被撑爆

问题分析 慢SQL的直接危害 数据库连接池长时间被占用,导致线程堆积,请求阻塞。 未释放的 ResultSet、Statement 或 Connection 可能导致内存泄漏(例如未正确关闭资源)。 大结果集(如一次性加载百万条数据到内存&…

高质量AI歌曲生成器ACE-Step一键启动整合包,AI自动谱曲自动演唱

本次分享一款AI歌曲创作利器:ACE-Step,ACE-Step是刚发布不久的AI自动谱曲AI自动演唱软件,软件在歌曲生成速度、音乐连贯性和可控性上相对同类软件有了较大提升。ACE-Step在3小时前刚发布了新版本,我基于当前最新版本制作了免安装一…

Facebook 的隐私保护措施是否足够?技术观点

在数字时代,隐私保护成为了公众关注的焦点,尤其是对于拥有数十亿用户的社交媒体巨头 Facebook 来说,其隐私保护措施的有效性更是备受瞩目。本文将从技术角度探讨 Facebook 的隐私保护措施是否足够。 数据收集与使用 Facebook 收集用户数据的…

多语种OCR识别系统,引领文字识别新时代

在全球化与数字化深度融合的今天,语言障碍成为企业跨国协作、信息管理的一大挑战。无论是跨国合同签署、多语言档案管理,还是跨境商务沟通,高效精准的文字识别技术已成为刚需。中安智能OCR多语种识别系统应运而生,凭借其强大的光学…