10进制转换为2进制和16进制

public class Main4{

	
	
	public static void main(String[] args)
	{
		Main4 solution = new Main4();
		// "0000000000001111,000F"
		System.out.println(solution.changeFormatNumber("15"));
		// "1111111111111111,FFFF"
		System.out.println(solution.changeFormatNumber("-1"));
		
		int num=(int)Math.pow(2, 15)-1;
		System.out.println(num);
		System.out.println(solution.changeFormatNumber(String.valueOf(num)));
		
		num=-(int)Math.pow(2, 15);
		System.out.println(num);
		System.out.println(solution.changeFormatNumber(String.valueOf(num)));
		
		num=(int)Math.pow(2, 15)+3;
		System.out.println(num);
		System.out.println(solution.changeFormatNumber(String.valueOf(num)));
		
		System.out.println(solution.changeFormatNumber("abc"));
	}
	
	
	/**
     * 将输入的十进制数字转换为对应的二进制字符串和十六进制字符串
     * @param number string字符串 十进制数字字符串
     * @return string字符串
     */
    public String changeFormatNumber (String number) {
    	try
		{
    		char[] chars=new char[16];
        	// 先都转为正数 num
        	int num = 0;
        	boolean isPlus = true; 
        	if(number.charAt(0)=='-'){
        		isPlus=false;
        		number=number.substring(1);    		
        	}
        	num=Integer.valueOf(number);
        	if(isPlus){
        		if(num>32767){
        			return "NODATA";
        		}
        	}else{
        		if(num>32768){
        			return "NODATA";
        		}
        	}
        	for(int i=0;i<16;i++){
        		int now=num&1;
        		if(now==0){
        			chars[15-i]='0';
        		}else{
        			chars[15-i]='1';
        		}
        		num=num>>1;
        	}	
        	
        	String binary = new String(chars);
        	if(!isPlus){
        		binary=changePlusToMinus(binary);
        	}
            return binary+","+getHexByBinaryNumber(binary);
		} catch (Exception e)
		{
			return "INPUTERROR";
		}
    	
    }
    
    /** 把16位的2进制正数变成16位的2进制负数,也就是对应的补码,即1111111111111111-number+1
     * @param number
     * @return
     */
    public String changePlusToMinus(String number){
    	char[] chars=number.toCharArray();
    	// 先1111111111111111-number
    	for(int i=0;i<16;i++){
    		if(chars[i]=='1'){
    			chars[i]='0';
    		}else{
    			chars[i]='1';
    		}
    	}
    	// 再+1  从右向左,找到第一个0,变成1,将右边全部都变成0
    	// 即从右向左,1边0,继续    0变1,停止
    	for(int i=15;i>=0;i--){
    		if(chars[i]=='1'){
    			chars[i]='0';
    		}else{
    			chars[i]='1';
    			break;
    		}
    	}
    	return new String(chars);
    	
    }
    
    
    public Map<String, String> map=new HashMap<String, String>();
	{
		map.put("0000", "0");
		map.put("0001", "1");
		map.put("0010", "2");
		map.put("0011", "3");
		map.put("0100", "4");
		map.put("0101", "5");
		map.put("0110", "6");
		map.put("0111", "7");
		map.put("1000", "8");
		map.put("1001", "9");
		map.put("1010", "A");
		map.put("1011", "B");
		map.put("1100", "C");
		map.put("1101", "D");
		map.put("1110", "E");
		map.put("1111", "F");
	}

    /** 根据16位的二进制字符串返回4位的十六进制字符串
     * @param binaryNumber
     * @return
     */
    public String getHexByBinaryNumber(String binaryNumber){
    	StringBuilder builder=new StringBuilder();
    	for(int i=0;i<16;i=i+4){
    		builder.append(map.get(binaryNumber.substring(i, i+4)));
    	}
    	return builder.toString();
    }
}
0000000000001111,000F
1111111111111111,FFFF
32767
0111111111111111,7FFF
-32768
1000000000000000,8000
32771
NODATA
INPUTERROR

10进制数字变成16位的2进制和4位的16进制

先10进制都变成正数的二进制,然后如果是负数,通过补码=反码+1,生成对应负数的二进制

然后将2进制转为16进制,4个数字为1组,从hashmap里得到对应的16进制

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值