二进制与十进制转换工具类

package util;

/**
 * 二进制工具类
 * 
 * @author 谢辉
 * @time 2020.07.01
 *
 */
public class BinaryUtil {
	/**
	 * 十进制数字转二进制
	 * 
	 * @param num       十进制数字
	 * @param strResult 结果容器,追加结果用,
	 * @return 返回结果字符串
	 */
	public static String DecimalToBinary(Integer num, StringBuilder strResult) {
		num = num < 0 ? 0 : num;
		Integer integer = num / 2;// 整除结果
		Integer StrInteger = num % 2;// 取余结果
		if (integer == 0) {// 表示1/2=0;商为0,不能再往下除了
			strResult.append(StrInteger);
		} else {
			// 递归追加结果
			strResult.append(StrInteger);
			DecimalToBinary(integer, strResult);
		}
		return new StringBuilder(strResult.toString()).reverse().toString();
	}

	/**
	 * 二进制转换十进制
	 * 
	 * @param binary 二进制字符串
	 * @return 转换的结果
	 * @throws NumberFormatException
	 */
	public static Integer BinaryToDecimal(String binary) throws NumberFormatException {
		char[] array = binary.toCharArray();
		// 对传入的二进制字符串检测
		for (int i = 0; i < array.length; i++) {
			if (array[i] != '0' && array[i] != '1') {
				throw new NumberFormatException("二进制只能有0或1!");
			}
		}
		// 再次检测字符串,避免‘00010101’,转成‘10101’
		int index = binary.indexOf("1") > 0 ? binary.indexOf("1") : 0;
		binary = array[0] == '0' ? binary.substring(index) : binary;
		// 规范二进制字符串后,开始计算结果
		return compute(binary);
	}

	private static Integer compute(String binaryNum) {
		Integer decimalNum = 0;
		int parseInt = Integer.parseInt(binaryNum);
		if (parseInt == 1) {
			return 1;
		} else if (parseInt <= 0) {
			return 0;
		} else {
			char[] binaryArr = binaryNum.toCharArray();
			decimalNum = binaryArr[1] == '0' ? 2 : 3;
			for (int i = 2; i < binaryArr.length; i++) {
				decimalNum = binaryArr[i] == '0' ? decimalNum * 2 : decimalNum * 2 + 1;
			}
			return decimalNum;
		}
	}

	/**
	 * 测试功能
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		int num = 33;
		String string = DecimalToBinary(num, new StringBuilder());
		System.out.println(num + "的二进制结果:" + string);

		Integer binaryToDecimal = BinaryToDecimal(string);
		System.out.println(string + "的十进制结果:" + binaryToDecimal);
	}

}

 

热门文章

暂无图片
编程学习 ·

Unity2D教程:菜单界面、文字设置、常用界面功能

菜单界面创建一个UI-Image,会自动生成Canvas。 设置Canvas的设置模式为随屏幕改变 设置Image的伸展模式,在这个界面按下Alt键会变成这样,选择右下角那个就是填充整个Canvas了在当前Image下创建Button,将Button下面的Text和Button自身都弄成预置物Text可以加一个Outline组件…
暂无图片
编程学习 ·

超星尔雅《中庸》精读

超星学习通app《中庸》精读 答案 孟琢“四书”的形成(一)1【单选题】著作( )是一部论述了人生修养境界的道德哲学专著。 答案:《中庸》A、《周易》B、《史记》C、《诗经》D、《中庸》2【单选题】中国古代思想家( )是儒家学派的创始人,被后世尊称为万世师表。 答案:孔子A、孔…
暂无图片
编程学习 ·

线程

1.线程 1.什么叫做线程,跟进程之间的关系 进程:独立的cup空间运行 线程:进程中的一个执行流程,一个进程中可以包含多个线程,这些线程共享该进程提供的资源 2.创建线程(两种方式) 让这类继承Thread类 class XXX extends Thread{ public void run() Thread xx = new Threa…
暂无图片
编程学习 ·

Zabbix+percona插件实现数据库mysql的监控

文章目录1.配置zabbix监控mysql的配置1.1 在zabbix-agent主目录(默认情况下为/ var / lib / zabbix)中创建.my.cnf2.配置percona2.1安装2.2配置文件2.3.在zabbix图形界面中导入模板2.3.1 监控的server添加监控项2.3.2 更改字体 1.配置zabbix监控mysql的配置 检测试验环境:确…
暂无图片
编程学习 ·

01 | 为什么需要消息队列?

1.应用场景见: https://blog.csdn.net/william_n/article/details/1040254082.学习/操作2.1 阅读文档01 | 为什么需要消息队列?李玥 2020-01-1400:0011:24讲述:李玥 大小:10.46M你好,我是李玥。今天我们来讲讲为什么需要消息队列,消息队列主要解决的是什么问题。消息队列…
暂无图片
编程学习 ·

Android Studio报错Error while merging dex archives

今天在编译代码时候出现这个报错,首先谈几句关于学习,其实刚开始新手时候什么都不懂,一遇到错误就慌得很,其实严格意义上这些所谓的报错都不是本身的错误,都只是我们不会用或者用错了导致的问题,就好像买了一辆车去水上开,结果沉了,还质问厂家问什么沉了。 所以这种所谓…
暂无图片
编程学习 ·

【GNURadio RTL-SDR】双RTL-SDR信号源的FM调频广播接收机

文章目录1. 前言2. 实验过程2.1 制作流图2.2 RTL-SDR的设备参数1. 前言 两个RTL-SDR的dongle“电视棒”,芯片 RTL2832U + R820T ,淘宝50左右那种能收FM和我国DTMB频段,想都接到同一台电脑去用软件无线电(GNURadio)的方式收多个FM调频广播信号。 2. 实验过程 在谷歌搜了不少…
暂无图片
编程学习 ·

防火墙中的DMZ区域,Trust区域,Untrust区域

** 区域的作用: ** 1.安全策略都基于区域实施 2.在同一区域内部发生的数据流动是不存在风险的,不需要实施任何安全策略。 只有当不同安全区域之间发生数据流动时,才会触发设备的安全检查,并实施相应的安全策略。 3.一个接口只能属于一个区域,而一个区域可以有多个接口。 *…
暂无图片
编程学习 ·

python向json文件中追加内容

我们常常会遇到这样的json文件: [{"id": 4, "text": "LOC", "background_color": "#7c20e0", "text_color": "#ffffff"}, {"id": 5, "text": "MISC", "background…
暂无图片
编程学习 ·

V2Pro春季班普遍学撑了,秋季班7月报名你还敢来么

今年V2春季班开班以后,同学们的学习信心保持着高涨,一直维持到了课程结业。今年春季班课程学习的进度在V2.1模块结束以后,我们开始推出了当时号称“加量不加价”的V2Pro增量课程,从DVT Eclipse工具的使用、覆盖率驱动验证管理流程、TBA测试平台自动化初级应用、寄存器一致性…
暂无图片
编程学习 ·

使用john软件进行账户弱口令检测实验

使用john软件进行账户弱口令检测实验 前言 在生产环境中,服务器账号的密码能够不被黑客入侵破解是尤为重要的,关系着业务正常运行的安全,所以在创建完账户的密码后,我们需要进行弱口令的检测,排查出是否有容易被破解的密码存在。 本次实验使用的破解密码软件是john-1.8.0版…
暂无图片
编程学习 ·

springboot aop 切到service层,不生效

今天发现一个问题,使用aop切到service层方法上,idea会有切成功的标志,编译也不报错,但就是不生效。研究了下发现,是因为我切的方法被同一个service中的其他方法调用,这样的话就不生效了,暂不清楚原因,解决方法时切到调用它的方法上,这只是切点不生效的一种情况,希望能…
暂无图片
编程学习 ·

线程池

目录概念优点架构线程池三种常用创建方式newFixedThreadPoolnewSingleThreadExecutornewCachedThreadPool线程池底层原理线程池工作流程线程池的拒绝策略自定义线程池 概念 线程池主要是控制运行线程的数量,将待处理任务放到等待队列,然后创建线程执行这些任务。如果超过了最…
暂无图片
编程学习 ·

现代开发者必备:5个更流畅、更受欢迎的Python web框架

全文共1837字,预计学习时长9分钟图源:unsplash如今,可供选择的Python web框架有不少,能帮助你更快更轻松地创建web应用。本文就将为大家介绍一些更现代、使用更广泛的web框架。1.FastAPIFastAPI致力于实现轻便和快速,笔者很喜欢它,它的开发速度和简单程度令人欣慰。这对于…
暂无图片
编程学习 ·

Hadoop(二)——HDFS的 I/O 流操作

API操作的HDFS系统都是框架封装好的,可以采用 I/O 流的方式实现数据的上传和下载。 HDFS文件上传 1、需求:将本地D盘上的honglou.txt文件上传到HDFS根目录 2、代码块@Test public void putFileToHDFS() throws IOException,InterruptedException,URISyntaxException{//1、获取…
暂无图片
编程学习 ·

ssm专题学习-spring的使用与相关项目的实现(1)

ssm专题学习-spring的使用与相关项目的实现(1)前言配置maven更改镜像创建项目更新并下载所需jar包web.xml、applicationContext.xml和spring-mvc.xml配置建立架构UserUserControllerUserDaoUserServiceIUserServiceJSP部分效果图 前言 暑期线上实训的第四节课。从今天开始课程…
暂无图片
编程学习 ·

6台路由器ospf+rip实验

一、环境OSPF路由协议是一种典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由域是指一个自治系统(Autonomous System),即AS,它是指一组通过统一的路由政策或路由协换路由信息的网络。在这个AS中,所有的OSPF路由器都维护一个相同的描述这个A…
暂无图片
编程学习 ·

Exception 的意义

Exception 的意义 文章目录Exception 的意义引言Exception 的语义自底向上的观点自顶向下的观点结论 引言 为什么程序设计语言要加入 Exception 机制?这个问题的答案或许不是那么显然。 Exception 常见于 “操作过程可能出现意外” 的场景。比如,试图打开文件时发现文件不存在…
暂无图片
编程学习 ·

Java中的递归

Java中的递归(涉及到面试)举个例子: package com.wang.digui; /* 递归*/ public class Demo {public static void main(String[] args) {int calcetor = calcetor(3);System.out.println(calcetor);}//算阶乘的public static int calcetor(int n){if (n == 1){return 1;}els…