进制转换

package com.zf.test;

import org.junit.Assert;
import org.junit.Test;


public class HexConversion {

	
	/**
	 * 十进制 -> 二进制
	 */
	@Test
	public void test01(){
		
		Integer a = 18 ;
		/**
		 * 18 / 2 = 9 余 0
		 * 9 / 2  = 4 余 1
		 * 4 / 2  = 2 余 0
		 * 2 / 2  = 1 余 0
		 * 1 / 2  = 0 余 1
		 * 结果:从下往上组合余数得到:1001
		 */
		
		Assert.assertEquals("10010", Integer.toBinaryString(a));
		
	}
	
	/**
	 * 二进制  -> 十进制
	 */
	@Test
	public void test02(){
		String b =  "10010";
		// 0 * 2^0 + 1 * 2^1 + 0 * 2^2 + 0 * 2^3 + 1 * 2^4  
		// =
		//    0    +    2    +   0     +  0      + 16  = 18
		
		Assert.assertEquals( b , Integer.toBinaryString(18));
		
	}
	
	
	/**
	 * 八进制 -> 10进制
	 */
	@Test
	public void test03(){
		int a = 015 ;
		/**
		 * 5 * 8^0 + 1 * 8^1 + 0 * 8^2 
		 * =
		 * 5 + 8 = 13
		 */   
		Assert.assertEquals(a, 13);
	}
	
	
	/**
	 * 十进制 -> 八进制
	 */
	@Test
	public void test04(){
		int a = 18 ;
		/**
		 * 18 / 8 = 2 余 2
		 * 2  / 8 = 0 余 2
		 * 结果:22(书写形式为 022 ,因为八进制需要以0开头)
		 */
		Assert.assertEquals(022, a);
	}
	
	/**
	 * 八进制  -> 二进制
	 */
	@Test
	public void test05(){
		int a = 023 ;
		/**
		 * 实际上八进制为23(前面的0是格式需要)
		 * 从后向前 每一位通过十进制转二进制的方式转换为三位二进制数,不够不零
		 * 3  -转换为二进制-> 011 
		 * 2  -转换为二进制-> 010
		 * 将结果从下网上书写得到: 010011
		 * 第一位0可以省略得到10011
		 */
		Assert.assertEquals("10011", Integer.toBinaryString(a));
		
	}       
	
	
	/**
	 * 二进制 -> 八进制
	 */
	@Test
	public void test06(){
		String b = "10011";
		/**
		 * 将二进制从右向左每3位分成一段,最后不够用0补
		 * 得到 
		 * 011 010
		 * 然后将每3位通过十进制转换的方式转换为十进制数
		 * 3   2
		 * 然后结果从后向前书写得到 23
		 * 所以得到结果 023
		 */
		Assert.assertEquals(b, Integer.toBinaryString(023));
		
	}
	
	
	/**
	 *  十六进制 -> 十进制
	 *  十六进制以0x开头, A、B、C、D、E、F分别表示10、11、12、13、14、15
	 */
	@Test
	public void test07(){
		int a = 0x1A ;
		/**
		 * 实际上为 1 10
		 * = 10 * 16^0 + 1* 16   
		 * = 10 + 16 
		 * = 26 ;
		 */
		Assert.assertEquals(26 , a);
	}
	
	
	/**
	 * 十进制 -> 十六进制
	 */
	@Test
	public void test08(){

		int a = 26 ;
		/**
		 * 26 / 16 = 1 余 10
		 * 1 / 16 =  0  余 1
		 * 结果为 1  10
		 * = 0x1A
		 */
		
		Assert.assertEquals(0x1A, a);
	}
	
	
	/**
	 * 二进制 -> 十六进制
	 */
	@Test
	public void test10(){
		String s = "111011";
		/**
		 * 从右向左每四位为一组分割,不足补0
		 * 得到
		 * 1011 0011 
		 * 按照十进制方法 ,转换为十进制
		 * 11    3
		 * 然后从后向前排列得到 3  11
		 * 11对应B
		 * 所以得到结果 0x3B
		 */
		
		Assert.assertEquals(Integer.toBinaryString(0x3B), s);
		   
	}
	
	/**
	 * 十六进制 -> 二进制
	 */
	@Test
	public void test09(){
		int a = 0x1A ;
		/**
		 * 将每一位转换为由四位组成的二进制数
		 * 1   A
		 * 转换
		 * 0001  1010
		 * 结果
		 * 11010
		 */
		Assert.assertEquals(Integer.toBinaryString(a), "11010");   
	}
	
	   
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值