首页 > 编程语言 >Java中十进制二进制相互转换的方法

Java中十进制二进制相互转换的方法

时间:2023-07-19 19:24:54浏览次数:56  
标签:binary Java 二进制 decimal 00000000 int 十进制

Java中十进制二进制相互转换的方法

在计算机中,数字的表示方式有多种,其中最常见的两种是十进制和二进制。十进制是我们日常生活中最熟悉的数制,它有10个数字符号,从0到9。二进制是计算机内部使用的数制,它只有两个数字符号,0和1。

在Java中,有时我们需要在十进制和二进制之间进行转换,例如在处理位运算或加密算法时。本文将介绍三种常用的方法来实现这种转换,并给出相应的代码示例。

方法一:使用Integer类的内置方法

Java提供了一个封装了整数相关操作的类Integer,它有一些内置的方法可以实现进制转换。我们可以利用以下两个方法来实现十进制和二进制之间的转换:

  • Integer.toString(int i, int radix):这个方法可以将一个整数i转换为指定基数radix的字符串表示。对于二进制,radix为2。
  • Integer.parseInt(String s, int radix):这个方法可以将一个指定基数radix的字符串s解析为一个整数。对于二进制,radix为2。

以下是使用这两个方法的代码示例:

// 十进制转二进制
int decimal = 156; // 十进制数
String binary = Integer.toString(decimal, 2); // 转换为二进制字符串
System.out.println(binary); // 输出10011100

// 二进制转十进制
String binary = "10011100"; // 二进制字符串
int decimal = Integer.parseInt(binary, 2); // 解析为十进制数
System.out.println(decimal); // 输出156

这种方法的优点是简单方便,不需要自己编写转换逻辑,只需要调用Java内置的方法即可。缺点是不能处理非整数或超过整数范围的数字。

方法二:使用除基取余法

这种方法是按照我们平时的数学逻辑思维,把十进制数不断除以2,然后把每次得到的余数(0或1)从下往上排列,直到商为0为止。例如,把十进制数156转换为二进制数的过程如下:

余数
156÷2=78 0
78÷2=39 0
39÷2=19 1
19÷2=9 1
9÷2=4 1
4÷2=2 0
2÷2=1 0
1÷2=0 1

所以,156<sub>10</sub>=10011100<sub>2</sub>。

要把一个二进制数转换为十进制数,也可以使用类似的方法,只不过是把除法变成乘法,把余数变成权值(即二的幂次方)。例如,把二进制数10011100转换为十进制数的过程如下:

10011100<sub>2</sub>=1×2<sup>7</sup>+0×2<sup>6</sup>+0×2<sup>5</sup>+1×2<sup>4</sup>+1×2<sup>3</sup>+1×2<sup>2</sup>+0×2<sup>1</sup>+0×2<sup>0</sup>

=128+16+8+4

=156

所以,10011100<sub>2</sub>=156<sub>10</sub>.

以下是使用这种方法的代码示例:

// 十进制转二进制
int decimal = 156; // 十进制数
String binary = ""; // 存储二进制字符串
while (decimal != 0) {
    binary = decimal % 2 + binary; // 把余数放在前面
    decimal = decimal / 2; // 把商作为新的被除数
}
System.out.println(binary); // 输出10011100

// 二进制转十进制
String binary = "10011100"; // 二进制字符串
int decimal = 0; // 存储十进制数
int len = binary.length(); // 获取二进制字符串的长度
for (int i = 0; i < len; i++) {
    // 第i位的数字为:
    int digit = Character.getNumericValue(binary.charAt(i));
    // 第i位的权值为:
    int power = (int) Math.pow(2, len - i - 1);
    // 累加到结果中
    decimal += digit * power;
}
System.out.println(decimal); // 输出156

这种方法的优点是符合数学原理,可以处理任意大小的数字,不受整数范围的限制。缺点是需要自己编写转换逻辑,比较繁琐,而且可能会出现精度损失的问题。

方法三:使用位运算法

这种方法是利用Java中的位运算符,来实现十进制和二进制之间的转换。位运算符有以下几种:

    • &:按位与,对两个操作数的每一位进行逻辑与运算,只有两个位都为1时,结果才为1。
    • |:按位或,对两个操作数的每一位进行逻辑或运算,只有两个位都为0时,结果才为0。
    • ^:按位异或,对两个操作数的每一位进行逻辑异或运算,只有两个位不同时,结果才为1。
    • ~:按位取反,对一个操作数的每一位进行逻辑非运算,即把0变成1,把1变成0。
    • <<:左移运算符,把一个操作数的所有位向左移动指定的位数,右边用0补齐。相当于乘以2的指定次方。
    • >>:右移运算符,把一个操作数的所有位向右移动指定的位数,左边用符号位补齐。相当于除以2的指定次方。
    • >>>:无符号右移运算符,把一个操作数的所有位向右移动指定的位数,左边用0补齐。相当于除以2的指定次方。

要把一个十进制数转换为二进制数,可以使用以下步骤:

    • 定义一个整型变量mask,它的值为1左移31位(即10000000 00000000 00000000 00000000),用来作为掩码。
    • 使用&运算符将十进制数和mask进行按位与运算,得到最高位(第31位)的值(0或1)。
    • 使用>>>运算符将十进制数无符号右移一位(即去掉最高位)。
    • 使用<<运算符将mask左移一位(即去掉最低位)。
    • 重复上述步骤,直到mask为0为止。

例如,把十进制数156转换为二进制数的过程如下:

十进制mask&>>><<
156 10000000 00000000 00000000 00000000 0 01111110 01000000 00000000 00000000 00000000
78 01000000 00000000 00000000 00000000 0 00111111  

标签:binary,Java,二进制,decimal,00000000,int,十进制
From: https://www.cnblogs.com/shoshana-kong/p/17566517.html

相关文章

  • Java多线程:关于锁
    目录互斥访问资源互斥状态的要求:atomic、volatile操作系统互斥锁mutex的缺点偏向锁、轻量级锁、重量级锁减小锁的粒度共享锁-读锁、排他锁/互斥锁-写锁避免死锁的锁特性:重入锁学习ConcurrentHashMap的锁思想结语互斥访问资源加锁的本质是,为了竞争一个资源访问互斥状态,保证线程安......
  • 页面框架 java代码
    页面框架Java代码简介在现代Web开发中,一个好的页面框架可以大大提高开发效率和代码质量。页面框架是一种提供基础结构和功能的软件库,它可以帮助开发人员快速构建和维护Web应用程序。本文将介绍Java语言中一些常用的页面框架,并提供相应的代码示例。1.SpringMVCSpringMVC是一......
  • 【后端面经-Java】JVM垃圾回收机制
    (【后端面经-Java】JVM垃圾回收机制)1.Where:回收哪里的东西?——JVM内存分配JVM垃圾回收机制(GarbageCollect,简称GC)主要负责回收JVM内存当中未被及时释放回收的内存区域,JVM垃圾回收机制让程序员摆脱了手动释放内存的操作,降低了程序员疏忽大意导致的风险。那么,垃圾回收机制到底针......
  • 兴业银行java笔试多少分过
    如何实现“兴业银行java笔试多少分过”整体流程为了实现“兴业银行java笔试多少分过”,我们需要按照以下步骤进行操作:步骤操作步骤一创建一个Java类步骤二添加一个主方法步骤三实现用户输入步骤四计算笔试成绩步骤五判断是否通过步骤六输出结果......
  • 无法将“java”项识别为
    无法将“java”项识别为?当我们在开发Java应用程序时,有时会遇到编译器报错信息:“无法将“java”项识别为”。这种错误通常表示编译器无法找到所需的Java类或接口。在本文中,我们将探讨可能导致该错误的原因,并提供解决方案。1.类路径错误Java编译器需要通过类路径来查找和加载所需......
  • 文本diff Java
    文本diffJava概述在软件开发过程中,经常会遇到需要对比两个文本文件或字符串的差异的情况。文本diff(差异)是指找出两个文本之间的增删改操作,从而得到这两个文本之间的差异。Java提供了一些库和算法来实现文本diff功能,我们可以使用它们来进行文本比较和差异分析。1.文本差异算法......
  • 【后端面经-Java】JVM垃圾回收机制
    目录1.Where:回收哪里的东西?——JVM内存分配2.Which:内存对象中谁会被回收?——GC分代思想2.1年轻代/老年代/永久代2.2内存细分3.When:什么时候回收垃圾?——GC触发条件4.Why:凭什么说它是垃圾?——垃圾判断算法4.1引用计数法4.2可达性分析法5.How:如何对待垃圾?——垃圾回收算法5......
  • 怎么看java环境
    怎么看Java环境Java环境是指Java开发和运行Java程序所需的软件和配置。它包括JavaDevelopmentKit(JDK)、JavaRuntimeEnvironment(JRE)和Java虚拟机(JVM)。在本文中,我将介绍如何查看Java环境并提供相关的代码示例。查看Java版本要查看Java环境,首先需要确定安装了Java开发工具包(JDK)......
  • 怎么遍历Java中可变数组
    如何遍历Java中的可变数组在Java中,可变数组是一种动态大小的数组,也称为动态数组或ArrayList。它可以根据需要自动调整大小,因此非常方便。遍历可变数组是经常使用的操作之一,本文将介绍如何遍历Java中的可变数组,并提供相应的代码示例。问题描述假设我们有一个可变数组,包含了一组学......
  • 怎么把java转成python
    如何将Java代码转换为Python代码在软件开发中,经常会遇到需要将一个编程语言的代码转换为另一种编程语言的代码的情况。本文将介绍如何将Java代码转换为Python代码,并使用一个实际问题来演示这个过程。假设我们需要解决一个实际的问题:给定一个整数数组,我们需要编写一个函数来计算数......