zoukankan      html  css  js  c++  java
  • 十进制转换成二进制、八进制、十六进制的通用方法

    /**
     * 将十进制转换成二进制、八进制、十六进制
     * 说明:
     * 1)、在JAVA语言一个整数用4个八位表示,即32个二进制位
     * 2)、一个二进制位用0和1表示,最大值是1
     * 3)、一个八进制位表示3个二进制位,最大值是7
     * 4)、一个十六进制位表示4个二进制位,最大值是15
     *
     */
    public class DecimalConvert {
    	
    	public static void main(String[] args) {
    		int num = 60;
    		System.out.println(num + "转换成二进制=" + toBinaryString(num));	
    		System.out.println(num + "转换成八进制=" + toOctalString(num));	
    		System.out.println(num + "转换成十六进制=" + toHexString(num));	
    	}
    	
    	/**
    	 * 十进制转成二进制
    	 * @param num 要转换成二进制的整数
    	 * @return 转成二进制后的字符串
    	 */
    	public static String toBinaryString(int num) {
    		return trans(num, 1, 1);
    	}
    	
    	/**
    	 * 十进制转成八进制
    	 * @param num 要转换成八进制的整数
    	 * @return 转成八进制后的字符串
    	 */
    	public static String toOctalString(int num) {
    		return trans(num, 7, 3);
    	}
    	
    	
    	/**
    	 * 十进制转成十六进制
    	 * @param num 要转换成十六进制的整数
    	 * @return 转成十六进制后的字符串
    	 */
    	public static String toHexString(int num) {
    		return trans(num, 15, 4);
    	}
    	
    	/**
    	 * 进制公共计算方法,提取进制转换相同的代码
    	 * @param num 要转换的整数
    	 * @param base 要转换的进制基数,如果是二进制:base=1; 如果是8进制:base=7; 如果是16进制:base=15
    	 * @param offset 右移位数,由转换的进制类型决定。二进制偏移1位,8进制偏移3位,16进制偏移4位
    	 * @return 转成进制后的字符串
    	 */
    	private static String trans(int num, int base, int offset) {
    		if (num == 0) 
    			return ""; 
    		StringBuffer result = new StringBuffer();
    		//存储二进制、八进制、十六进制的字符表
    		char[] chs = new char[] {
    				'0','1','2','3',
    				'4','5','6','7',
    				'8','9','A','B',
    				'C','D','E','F'
    		};
    		
    		char[] arr = new char[32];	//JAVA中int用4个二进制八位表示,即32个二进制位,所以存储的值最大不会超过32位
    		
    		int pos = arr.length;		//存储进制值的指针
    		
    		//开始计算,直到有效位为0才停止计算
    		while(num != 0) {
    			//与(&)上转换进制有效位的最大值,如果在16进制中,一个十六进制位表示4个二进制位,4个二进制位的最大值是15,所以这里的base就是15
    			int temp = num & base;	
    			//从最大下标位开始存储,方便取出拼接。temp的值在0-15之间,所以直接将与后的值从字符表中取出来得到相应的进制值
    			arr[--pos] = chs[temp];
    			//无符号右移,如果是16进制,则右移4位,因为一个十六进制位表示4个二进制位,所以这里的offset就是4
    			num = num >>> offset;
    		}
    		
    		//将计算后的值拼接成相应的进制表示方式,由于是反着存储的,所以要从最后保存的指针位置开始取才能保证表现的进制数是正确的
    		for (int i = pos; i < arr.length; i++) {
    			result.append(arr[i]);
    		}
    		
    		return result.toString();
    	}
    
    }
    


  • 相关阅读:
    redhat 6.4下PXE+Kickstart无人值守安装操作系统
    ubuntu14.04安装好Hadoo之后接着安装hbase和介绍常用命令
    避坑之Hadoop安装伪分布式(Hadoop3.2.0/Ubuntu14.04 64位)
    kindeditor文件上传设置文件说明为上传文件名(JSP版)
    sqlmap 扫描注入漏洞
    局域网内访问不同网段的主机(转记)
    cmd创建用户开启3389命令
    用python来更改windows开机密码
    代码安全之上传文件
    web渗透(转)
  • 原文地址:https://www.cnblogs.com/xyang0917/p/4172550.html
Copyright © 2011-2022 走看看