第一种:除基倒取余法

这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2...依次循环,直到商为0结束,把余数倒着依次排列,就构成了转换后的二进制数。

那么,在实际实现中,可以用int的一个数来存储最后的二进制,每次求余后把余数存储在int型数的低位,依次递增。

public void binaryToDecimal(int n){int t = 0;  //用来记录位数int bin = 0; //用来记录最后的二进制数int r = 0;  //用来存储余数while(n != 0){r = n % 2;n = n / 2;bin = r * Math().pow(10,t);t++; }System.out.println(bin);}

但是int型最大只能表示2^31-1 的正数,所以,存储的二进制数位数有限;我们都知道,int在java中的存储范围是32位,则可以使用字符串的拼接(+)来实现,代码如下:

public void binaryToDecimal(int n){String str = "";while(n!=0){str = n%2+str;n = n/2;}System.out.println(str);
}

第二种:利用“移位”操作实现

我们可以直接利用移位操作对一个十进制数进行移位操作,即:将最高位的数移至最低位(移31位),除过最低位其余位置清零,使用& 操作,可以使用和1相与(&),由于1在内存中除过最低位是1,其余31位都是零,然后把这个数按十进制输出;再移次高位,做相同的操作,直到最后一位 ,代码如下。可以说,这是我到目前为止见到的最简单的实现方式了。

public void binaryToDecimal(int n){for(int i = 31;i >= 0; i--)System.out.print(n >>> i & 1);
}

说明:由于计算机中存储的都是数的补码,正数的原码、反码、补码都是相同的;而负数的原码、反码、补码是不一样的,补码=原码取反+1(符号位不变)。所以,负数是按照它的补码输出的。

>>>为逻辑移位符,向右移n位,高位补0
>> 算数移位符,也是向右移n位,不同的是:正数高位补0,负数高位补1
<< 移位符,向左移n位,低位补0

第三种:调用API函数

这是处理问题更符合面向对象的一种方式:

public void function1(int n){String result = Integer.toBinaryString(n);//int r = Integer.parseInt(result);//System.out.println(r);
     System.out.println(result);}

小小的建议:  此代码中,可以直接用字符串输出;也可以利用Interger.parseInt()转化为int,但不建议这种方式,当为负数时,int型的表示不了32的一个整数

转载于:https://www.cnblogs.com/cat520/p/9440948.html

Java中实现十进制数转换为二进制的三种方法相关推荐

  1. Java中实现十进制数转换为二进制的几种办法

    Java中实现十进制数转换为二进制 第一种:除基倒取余法 这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2...依次循环,直到商为0结束,把余数倒 ...

  2. Java中实现十进制数转换为二进制

    Java中实现十进制数转换为二进制 第一种:除基倒取余法 这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2-依次循环,直到商为0结束,把余数倒着依 ...

  3. java中如何启动一个新的线程三种方法

    java开启新线程的三种方法: 方法1:继承Thread类 1):定义bai一个继承自Java.lang.Thread类的du类A. 2):覆盖zhiA类Thread类中的run方法. 3):我们编写 ...

  4. C语言中求两数最大公约数的三种方法

    1.穷举法 思路: 首先对输入的两个数x,y判断两者的大小,取两者中较小的数放入i中.然后用x%i;y%i,如果两者都为0,则此时i为最大公约数.如果其中有一个不为0,则i减1后再用x,y分别模上i( ...

  5. java中判断字符串是否为数字的三种方法

    1用JAVA自带的函数 public static boolean isNumeric(String str){for (int i = str.length();--i>=0;){ if (! ...

  6. 利用栈实现把十进制数转换为二进制至十六进制之间的任一进制数并输出的功能。(第二版)

    [实验题目内容] 保持计算机默认的十进制不变(要求不用C++流操纵符转换基数为八进制形式oct,不用C++流操纵符转换基数为十六进制形式hex,也不用setbase(base)函数将基数设置为base ...

  7. 利用栈实现把十进制数转换为二进制至十六进制之间的任一进制数并输出的功能。

    利用栈实现把十进制数转换为二进制至十六进制之间的任一进制数并输出的功能. [实验题目内容] [实验环境](使用的软件):VS - 2010 [项目设计源代码] [项目测试运行结果截图] [实验题目内容 ...

  8. C++十进制数转换为二进制表示的算法(附完整源码)

    C++十进制数转换为二进制表示的算法 C++十进制数转换为二进制表示的算法完整源码(定义,实现,main函数测试) C++十进制数转换为二进制表示的算法完整源码(定义,实现,main函数测试) #in ...

  9. 十进制转化为二进制的几种方法

    /十进制转二进制的三种方法/ package 数据结构; import java.util.Scanner;; public class 十转二进制 { public static void main ...

  10. 把十进制转化为二进制的一种方法

    把十进制转化为二进制的一种方法: void pb(int n){if(n != 0){pb(n/2);putchar('0'+n%2);} }int main(void){for(int i=10; ...

最新文章

  1. java 有界类型_Java™ 教程(有界类型参数)
  2. 机器学习:林智仁libsvm 工具箱 在matlab下的应用总结
  3. Centos 7网络属性配置及命令
  4. 线段树位运算的三种操作(|,^,)
  5. 写sql语句的经验之谈
  6. php+oracle新增数据类型,Oracle 修改某个字段的数据类型三种方式
  7. C语言 static
  8. 实现Trie(前缀树)
  9. 容器转换类型,列表,集合,字典推导式
  10. Delphi TBitmap Scanline
  11. phpstorm 10 注册码
  12. ClassLoader类解析
  13. Java 获取系统字体
  14. 超定方程组 matlab
  15. 编译安装vlmcsd
  16. 计算机自动维护有用吗,Win10怎么开启自动维护功能?系统自动维护有什么作用?...
  17. 基于单片机的超市储物柜设计_基于单片机的新型智能储物柜设计
  18. 什么是PMU(PMIC)【转】
  19. [BJDCTF2020]Mark loves cat详细解法与思路
  20. FPGA中ROM IP与RAM IP核配置与调用

热门文章

  1. 长方体空间移动工程师_打破常规,私人定制移动阳光房
  2. ppocr 源码阅读:ppocr.modeling.architecures 之build_model模块
  3. AttributeError: 'numpy.int64' object has no attribute 'translate'
  4. python快速编程入门课本中的名片管理器_Python-名片管理器
  5. 【机器学习系列】隐马尔科夫模型第一讲:通俗易懂概述HMM
  6. 【机器学习系列】变分推断第一讲:Variational Inference背景和用途
  7. Boost C++ 智能指针
  8. MATLAB神经网络工具箱学习
  9. 高等代数期末考试题库及答案_高等代数3学时试题题目及答案,课程2021最新期末考试题库,章节测验答案...
  10. mysql explain G_MySQL 性能优化神器 Explain 使用分析