2.8.16与10进制间的关系

1. 10进制

123,456,789:
123,456,789 = 1 * 10^8 + 2 * 10^7 + 3 * 10^6 + 4 * 10^5 + 5 * 10^4 + 6 * 10^3 + 7 * 10^2 + 8 * 10^1 + 9 * 10^0;

2. 2进制

0011-1101:
61  = 0 * 2^7 + 0 * 2^6 + 1 * 2^5 + 1 * 2^4  + 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0;

3. 8进制

o75:
61 = 7 * 8^1 + 5 * 8^0; 

4. 16进制

0x3d:
61 = 3 * 16^1 + 13 * 16 ^ 0;

5.练习代码

/*
需求:
	将指定的10进制数转换为指定的进制
思路:
	根据各进制的特点来进行数据转换
步骤:
	1.定义转换的方法
	2.该方法需要接受两个参数,一个为10进制数,一个为要转换的目标进制
	3.该方法返回一个目标进制的字符串
*/
class SysConvert 
{
	private static final int BASE_BIN = 2;
	private static final int BASE_OCT = 8;
	private static final int BASE_HEX = 16;

	public static void main(String[] args) 
	{
		System.out.println(dec2Other(29,2));
		System.out.println(dec2Other(29,8));
		System.out.println(dec2Other(29,16));
		outputNumByBit(23232438);
	}

	/*
	
	*/
	public static String dec2Other(int num, int base) 
	{
		if(BASE_BIN == base)
		{
			return toBinString(num);
		}
		else if(BASE_OCT == base)
		{
			return toOctString(num);
		}
		else if(BASE_HEX == base)
		{
			return toHexString(num);
		}

		return null;
	}

	/*
	需求:
		将10进制数转换为2进制
	思路:
		
	*/
	private static String toBinString(int num)
	{
		final int base = 2;
		StringBuffer sb = new StringBuffer();
		
		while(0 != num)
		{
			sb.insert(0,num%base);
			num /= base;
		}

		return (sb.length() == 0 ? "0" : sb.toString());
	}

	/*
	需求:将10进制转换为8进制
	*/
	private static String toOctString(int num)
	{
		final int base = 8;
		StringBuffer sb = new StringBuffer();
		
		while(0 != num)
		{
			sb.insert(0,num%base);
			num /= base;
		}

		return (sb.length() == 0 ? "0" : sb.toString());
	}

	/*
	需求:
		将10进制转换为16进制
	注意:
		16进制中大于9以后对应的为a,b,c,d,e,f
	*/
	private static String toHexString(int num)
	{
		final int base = 16;
		StringBuffer sb = new StringBuffer();
		
		while(0 != num)
		{
			if(num%base > 9)
			{
				sb.insert(0,(char)((num%base-10)+'a'));
			}
			else
			{
				sb.insert(0,num%base);
			}		
			num /= base;
		}

		return (sb.length() == 0 ? "0" : sb.toString());
	}

	/*
	需求:
		将一个10进制的整形数按位输出
	思路:
		根据计算10进制数的规则来反向计算每位的数字
		以12032为例:
		12032 = 1*10(4) + 2*10(3) + 0*10(2) + 3*10(1) + 2*10(0);
	步骤:
		1.将10进制数与10做模运算,余数即为该位的数字;
		2.将该数/10的结果赋回给该数;
		3.继续步骤1,知道该数为0结束;
	*/
	private static void outputNumByBit(int num)
	{
		int base = 10;

		while(num != 0)
		{
			System.out.println(num%base);
			num /= base;
		}
	}

}

总结:以上是各进制与10进制之间的转换关系,通过这种关系即可以实现进制转换,我们可以以10进制为转换桥梁,也是一种转换方法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值