Java中实现十进制数转换为二进制的几种办法
Java中实现十进制数转换为二进制
第一种:除基倒取余法
这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2...依次循环,直到商为0结束,把余数倒着依次排列,就构成了转换后的二进制数。
那么,在实际实现中,可以用int的一个数来存储最后的二进制,每次求余后把余数存储在int型数的低位,依次递增。
1 public void binaryToDecimal(int n){ 2 int t = 0; //用来记录位数 3 int bin = 0; //用来记录最后的二进制数 4 int r = 0; //用来存储余数 5 while(n != 0){ 6 r = n % 2; 7 n = n / 2; 8 bin = r * Math().pow(10,t); 9 t++; 10 } 11 System.out.println(bin); 12 }
但是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位都是零,然后把这个数按十进制输出;再移次高位,做相同的操作,直到最后一位 ,代码如下。可以说,这是我到目前为止见到的最简单的实现方式了。
1 public void binaryToDecimal(int n){ 2 for(int i = 31;i >= 0; i--) 3 System.out.print(n >>> i & 1); 4 }
说明:由于计算机中存储的都是数的补码,正数的原码、反码、补码都是相同的;而负数的原码、反码、补码是不一样的,补码=原码取反+1(符号位不变)。所以,负数是按照它的补码输出的。
>>>为逻辑移位符,向右移n位,高位补0
>> 算数移位符,也是向右移n位,不同的是:正数高位补0,负数高位补1
<< 移位符,向左移n位,低位补0
第三种:调用API函数
这是处理问题更符合面向对象的一种方式:
1 public void function1(int n){ 2 String result = Integer.toBinaryString(n); 3 //int r = Integer.parseInt(result); 4 //System.out.println(r); 5 System.out.println(result); 6 }
小小的建议: 此代码中,可以直接用字符串输出;也可以利用Interger.parseInt()转化为int,但不建议这种方式,当为负数时,int型的表示不了32的一个整数
Java中实现十进制数转换为二进制的几种办法相关推荐
- Java中实现十进制数转换为二进制
Java中实现十进制数转换为二进制 第一种:除基倒取余法 这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2-依次循环,直到商为0结束,把余数倒着依 ...
- 利用栈实现把十进制数转换为二进制至十六进制之间的任一进制数并输出的功能。(第二版)
[实验题目内容] 保持计算机默认的十进制不变(要求不用C++流操纵符转换基数为八进制形式oct,不用C++流操纵符转换基数为十六进制形式hex,也不用setbase(base)函数将基数设置为base ...
- 利用栈实现把十进制数转换为二进制至十六进制之间的任一进制数并输出的功能。
利用栈实现把十进制数转换为二进制至十六进制之间的任一进制数并输出的功能. [实验题目内容] [实验环境](使用的软件):VS - 2010 [项目设计源代码] [项目测试运行结果截图] [实验题目内容 ...
- C++十进制数转换为二进制表示的算法(附完整源码)
C++十进制数转换为二进制表示的算法 C++十进制数转换为二进制表示的算法完整源码(定义,实现,main函数测试) C++十进制数转换为二进制表示的算法完整源码(定义,实现,main函数测试) #in ...
- Python | 不使用库函数将十进制数转换为二进制
Given a decimal number and we have to convert it into binary without using library function. 给定一个十进制 ...
- 栈的应用--数制转换(十进制数转换为二进制,八进制,十六进制)
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 1024 typedef int ElemType;typedef s ...
- 栈的应用--数制转换(十进制数转换为二进制、八进制、十六进制)
结果图: 代码如下: #include<stdio.h> #include<stdlib.h> #define ERROR 0 #define OK 1 typedef int ...
- 十进制数转换为二进制,八进制,十六进制数的算法(欢迎拍砖)
<script type="text/JavaScript"> </script> <script src="http://a.alimam ...
- 数制转换,使用按权展开法将二进制数转换为十进制数,使用短除法除2取余计算十进制数转换为二进制数
1:数制转换 1.1 问题 1)请将下列数字转换为十进制数: (110010011111)2 .(10110101110)2 2)请将下列十进制数转换为二进制: 156.2608.1043 1.2 方 ...
最新文章
- 是财富自由的声音,蚂蚁上市前,取消了周报
- 字段对应数组_字段不同的多个工作薄汇总? 还要固定字段位置 !难不倒我!...
- Python两数之和,并返回下标
- linux盘符改名字,Linux 下powerpath共享磁盘名称不一致处理方法
- Java Web项目运行流程
- 前嗅ForeSpider教程:如何创建新任务
- WPF 用Popup做下拉菜单
- C语言的参数传递原理解析(值传递)
- linux 安装postgres 全文检索支持
- 无盘服务器pnp,无盘系统PNP方法详细说明
- javax.net.ssl.SSLException: closing inbound before receiving peer‘s close_notif---SpringCloud工作笔记111
- python数据结构剑指offer-二维数组中的查找
- easyMule如何导入未完成任务
- 微信小程序 — 生成二维码功能
- FasterRCNN
- PDF怎么转换成JPG图片?教你如何快速转换
- 敌退我进 锂电产业链中日韩三国演义
- Windows配置Rsync同步,安装cwRsync
- 华三服务器如何修改默认ip,H3C路由器默认登录入口 192.168.124.1 设置步骤
- 通过js获取谷歌浏览器版本
热门文章
- 学习少儿编程成就不平凡人生
- 华为如何开启找回服务器,华为服务器BIOS恢复出厂设置
- 在silverlight 使用 IronPython
- 获取OneDrive容量5T及Office365
- 基于java的一款实时聊天系统,包含服务端 + 客户端 + web端
- 什么是编程语言,语言之间的区别
- 关于Tomcat中文乱码问题的探究
- python豆瓣mysql_python爬虫获取豆瓣电影——Python操作MySQL存储数据
- 8583 报文解析过程
- nextvlad:一个用于大规模视频分类的聚集帧级特征的有效神经网络 NeXtVLAD: An Efficient Neural Network toAggregate Frame-level Fea