复习题十一

本文介绍了一种使用位运算、数组映射和Character.forDigit方法将十进制数转换为十六进制数的方法,并通过实例演示了每种方法的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package 复习题;

import java.util.Scanner;

public class 复习题十一 {

	/**
	 * @使用移位方式将一个十进制数转换为十六进制。
	 * 三种方式: 
	 * 0-9之间的数值直接加上字符'0',9以上的数值减去10以后再加上字符'A' 定义一个数组,
	 * 其中包含0-F这些字符,然后用要计算的数值作为数组的索引号,即可获得其对应的十六进制数据。 
	 * Character.forDigit静态方法可以将一个十六进制的数字转变成其对应的字符表示形式.例如,根据数值15返回字符'F'。
	 */
	public static void main(String[] args) {
		Scanner input = new Scanner (System.in);
		System.out.println("请输入一个十进制的整数,程序为你转换成它的十六进制形式 ....");
		String line = input.next();
		int x = Integer.parseInt(line);
		System.out.println(sexadecimal1(x));
	}

	static StringBuffer sexadecimal(int a) {		  //定义一个方法,用来计算十进制转十六进制的结果	
		StringBuffer sb = new StringBuffer();		  //定义一个容器用来装每次%16的结果
		while (a > 0) {
			int b = a& 15;                            //定义一个变量y让并赋值是x除以16得到的余数,用位运算的方式体现  a% 16
			if (b > 9) {                              //将余数转化为16进制,"余数-10"得到大于10的部分,大于多少就把'A'加上多少,再把得数强转成char.
				sb.append((char) (b- 10 + 'A'));
			} else {                                  //如果余数不大于9,直接将余数添加容器中
				sb.append(b);
			}
			a = a >> 4 ;                              //a = a / 16;  //2*2*2*2		
		}
		sb.reverse();								  //将余数反转
		return sb;                                    //将容器的结果返回
	}

	static StringBuffer sexadecimal1(int a) {         //用数组的方式来进行十进制对十六进制的转换
		StringBuffer sb = new StringBuffer();         //定义一个容器,用来装取余数对应的数组中的元素
		char arr[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
				'B', 'C', 'D', 'E', 'F' };            
		while (a > 0) {								  //定义一个循环,a%16取得的余数等于数组中的角标就让该角标对应的字符添加到容器中
			for (int i = 0; i < arr.length; i++) {
				if (a % 16 == i)
					sb.append(arr[i]);
			}
			a =a/16;								  //外层while循环的目的是不断的将a/16的结果重新赋值给a
		}
		sb.reverse();								  //将容器反转
		return sb;                                    //将获得的容器的结果返回
	}
	
	static StringBuffer sexadecimal2(int a) {		  //定义一个方法,用来计算十进制转十六进制的结果	
		StringBuffer sb = new StringBuffer();		  //定义一个容器用来装每次%16的结果
		while (a > 0) {
			    int y = a&15;                                  
				sb.append(Character.forDigit(y,16));  //将y转成十六进制形式
			a = a >> 4 ;                              //a = a / 16;  //2*2*2*2		
		}
		sb.reverse();								  //将余数反转
		return sb;                                    //将容器的结果返回
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值