JAVA小练习-进制转换1

public class ConvertTest {
	public static void main(String[] args) {
		
		int val = 28;
		
		System.out.println("要进行转换的十进制数为: "+val);
		
		decialToHex(val);
		
	}
	
	public static void decialToHex(int x) {
		
// 因为要将最后计算的结果转换为对应的十六进制的数,因此,先创建一个表。
		
		char[] hextab = {'0','1','2','3',
						 '4','5','6','7',
						 '8','9','A','B',
						 'C','D','E','F'};

// 新建一个数组,用于存放转换后的结果。
// 并创建一个变量,存放结果数组的长度。
// 目的一是为了按照从后到前的位置存放计算出来的结果,
// 二是为了打印的时候,从第一个开始存放值的位置开始打印。
		
		char[] rslt = new char[8];
		int pos = rslt.length;

// 15的而二进制数是1111,将要转换的数值与15进行异或运算之后就可以取得该数二进制的后4位,然后将其转换为十进制,最后再使用查表法,找出它对应的十六进制数。
// 第一个4位计算结束之后,将第二个4位位移过来,再次与15进行异或,每4位都依次进行计算, 注意此时位移时用的是>>>,而不是>>,
// 因为>>>在位移之后使用无效位在前面进行填充,如果使用>>的话,前面就会不断地添加有效位,计算永远就算不完。
// 此循环当某个4位计算的结果为0时,表示计算结束。
		
		while (x!=0) {
			int xor = x & 15;
			rslt[pos-1] = hextab[xor];
			pos--;
			x = x >>> 4;
		}
	
		System.out.print("经过转换为十六进制数为: ");
		
// 打印结果时,因为上面的循环已经将pos更改为了最后一次放入的结果的位置,因此,这个位置就是打印开始的位置。如果从数组第一个位置开始打印的话,那打印出来的结果就会有多个空格。	
	
		for (int i = pos; i < rslt.length; i++) {
				System.out.print(rslt[i]);
		}
	}
	
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值