java-十进制、八进制、十六进制数互相转换

这篇博客分享了一个Java小程序,实现十进制、八进制、十六进制数之间的互相转换。通过程序演示了各种进制转换的过程,并给出了具体的转换结果。此外,还提到了相关面试题和学习资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

懒人不愿做题,所有的东西都用程序跑出来是最好的,下面做一个十进制、八进制、十六进制数互相转换的小程序

public class JZTurn {

	public static void main(String[] args) {
		int num2 = 1314521;
		System.out.println("十进制数:"+num2);
		System.out.println("十进制转换二进制:"+turn2(num2));
		System.out.println("十进制转换八进制:"+turn8(num2));
		System.out.println("十进制转换十六进制:"+turn16(num2));
		
		//2-> 8
		System.out.println("二进制转换八进制:"+twoTurnEight(turn2(num2)));
		System.out.println("八进制转换二进制:"+eightTurnTwo(turn8(num2)));
		System.out.println("八进制转换十六进制:"+eightTurnSixteen(turn8(num2)));
		//2->16
		System.out.println("二进制转换十六进制:"+twoTurnSixteen(turn2(num2)));
	}
	
	/**
	 * 10进制转二进制
	 * @param num
	 * @return
	 */
	public static String turn2(int num){
		String shortTimeNum = "";
		int remainder = 0;
		/**
		 * 模拟短除法
		 */
		while(num >= 1){
			remainder = num % 2;
			num = num / 2;
			shortTimeNum = remainder + shortTimeNum;
		}
		
		return shortTimeNum;
	}./*欢迎加入java交流Q君样:909038429一起吹水聊天
	
	/**
	 * 10进制转8进制
	 * @param num
	 * @return
	 */
	public static String turn8(int num){
		String shortTimeNum = "";
		int remainder = 0;
		/**
		 * 模拟短除法
		 */
		while(num >= 1){
			remainder = num % 8;
			num = num / 8;
			shortTimeNum = remainder + shortTimeNum;
		}
		
		return shortTimeNum;
	}
	
	/**
	 * 10进制转16进制
	 * @param num
	 * @return
	 */
	public static String turn16(int num){
		String shortTimeNum = "";
		int remainder = 0;
		String tempStr = "";
		/**
		 * 模拟短除法
		 */
		while(num >= 1){
			remainder = num % 16;
			tempStr = getOtherNum(remainder);
			
			num = num / 16;
			shortTimeNum = tempStr + shortTimeNum;
		}
		
		return shortTimeNum;
	}
	
	/**
	 * 2进制转换8进制
	 * 概念说明:这里转换的是整数,从右向左三位一组分别乘以2的零次方,2的一次方,2的2次方
	 * 然后把每组中的数相加,再把各组从左向右拼接到一起
	 * @param strNum2
	 */
	public static String twoTurnEight(String strNum2){
		String resultNum = "";
		int remainder = strNum2.length() % 3;
		
		//补位 三位一组,最后一组位数不够用0补充
		switch(remainder){
		case 1:
			strNum2 = "00"+strNum2;
			break;
		case 2:
			strNum2 = "0"+strNum2;
			break;
		}
		int index = strNum2.length()-1;
		int tempNum1 = 0;
		int tempNum2 = 0;
		int tempNum3 = 0;
		while(index>=1){

			index -- ;
			
			if(index % 3 == 0){
				//每个数为一组
				tempNum1 = Integer.parseInt(strNum2.substring(index, index+1));
				tempNum2 = Integer.parseInt(strNum2.substring(index+1, index+2));
				tempNum3 = Integer.parseInt(strNum2.substring(index+2, index+3));
				
				resultNum = tempNum3*1+tempNum2*2+tempNum1*4+resultNum;
				
			}
			
		}
		
		return resultNum;
	}
	
	/**
	 * 八进制转换二进制
	 * @param eightNum
	 * @return
	 */
	public static String eightTurnTwo(String eightNum){
		String twoNum = "";
		int index = eightNum.length()-1;
		
		String tempNum = "";
		while(index>=0){
			
			tempNum = turn2(Integer.parseInt(eightNum.substring(index, index+1))) ;
			
			//补位,在转换8进制时是每三为二进制数为一组,转换回二进制时位数也需要是三位,不够用零补
			switch (tempNum.length()) {
			
			case 1:
				tempNum = "00"+tempNum;
				break;

			case 2:
				tempNum = "0"+tempNum;
				break;
			}
			
			twoNum = tempNum + twoNum;
			index--;
		}
		
		return twoNum;
	}
	
	/**
	 * 2进制转换16进制
	 * 概念说明:这里转换的是整数,从右向左四位一组分别乘以2的零次方,2的一次方,2的2次方,2的3次方,
	 * 然后相加把每组最终的得数一次从左向右拼到一起,若其中一组的和大于9,按照对应关系转换后再把每组的结果拼接到一起
	 * @param strNum2
	 */
	public static String twoTurnSixteen(String strNum2){
		String resultNum = "";
		int remainder = strNum2.length() % 4;
		
		//补位,四位一组,最后一组位数不够用0补充
		switch(remainder){
		case 1:
			strNum2 = "000"+strNum2;
			break;
		case 2:
			strNum2 = "00"+strNum2;
			break;
		case 3:
			strNum2 = "0"+strNum2;
			break;
		}
		int index = strNum2.length()-1;
		int tempNum1 = 0;
		int tempNum2 = 0;
		int tempNum3 = 0;
		int tempNum4 = 0;
		int tempNum5 = 0;
		while(index>=1){

			index -- ;
			
			if(index % 4 == 0){
				//每个数为一组
				tempNum1 = Integer.parseInt(strNum2.substring(index, index+1));
				tempNum2 = Integer.parseInt(strNum2.substring(index+1, index+2));
				tempNum3 = Integer.parseInt(strNum2.substring(index+2, index+3));
				tempNum4 = Integer.parseInt(strNum2.substring(index+3, index+4));
				
				tempNum5 = tempNum4*1 + tempNum3*2+tempNum2*4+tempNum1*8;
				
				resultNum = getOtherNum(tempNum5) +resultNum;
				
			}
			
		}
		
		return resultNum;
	}
	
	/**
	 * 8进制转换16进制
	 * @param strNum2
	 */
	public static String eightTurnSixteen(String strNum2){
		return twoTurnSixteen(eightTurnTwo(strNum2));
	}./*欢迎加入java交流Q君样:909038429一起吹水聊天
	
	/**
	 * 16进制转换中的特殊处理,需要把大于9的数字转换成字母
	 * @param tempNum
	 * @return
	 */
	public static String getOtherNum(int tempNum){
		String tempStr = "";
		if(tempNum > 9){
			switch(tempNum){
			case 10:
				tempStr = "A";
				break ;
			case 11:
				tempStr = "B";
				break;
			case 12:
				tempStr = "C";
				break;
			case 13:
				tempStr = "D";
				break;
			case 14:
				tempStr = "E";
				break;
			case 15:
				tempStr = "F";
				break;
			}
		}else{
			tempStr = String.valueOf(tempNum);
		}
		return tempStr;
	}
}

输出结果:
十进制数:1314521
十进制转换二进制:101000000111011011001
十进制转换八进制:5007331
十进制转换十六进制:140ED9
二进制转换八进制:5007331
八进制转换二进制:101111011011001
八进制转换十六进制:5ED9
二进制转换十六进制:140ED9
image
最新2020整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友请加Q君样:909038429
/./*欢迎加入java交流Q君样:909038429一起吹水聊天

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值