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]);
}
}
}
JAVA小练习-进制转换1
最新推荐文章于 2024-04-15 15:36:19 发布