Part 1 获取一个整数的16进制表现形式
例1:
0000-0000 0000-0000 0000-0000 0011-1100 --------60
& 0000-0000 0000-0000 0000-0000 0000-1111 --------15
-----------------------------------------------------------------------------------
0000-0000 0000-0000 0000-0000 0000-1100 -------12
>>> 0000-0000 0000-0000 0000-0000 0011-1100--------60>>>4
& 0000-0000 0000-0000 0000-0000 0000-1111 --------15
-----------------------------------------------------------------------------------------
0000-0000 0000-0000 0000-0000 0000-1100-------12
十进制数转换成十六进制数为例
将60与15进行与操作,其值就是60的十六进制的最低位。
再将60无符号右移4位,再与15进行与操作,其值就是60的十六进制的倒数第二位。
.由上面的例子可以总结出,将一个十进制数转换为十六进制的步骤就是:
将十进制数与15相与,将结果存储到一个数组的最低位。
然后将十进制数右移4位,再与15进行与操作,其值就是该数对应的十六进制的倒数第二位。
再右移4为,与15相与,直到相与结果为0为止。
public static void main(String[] args) {
toHex(60);
}
static void toHex(int num) {
for (int x = 0; x < 8; x++) { // 整数的16进制最多8位
int temp = num & 15;
if (temp > 9)
System.out.println((char)(temp - 10 + 'A'));
else
System.out.println(temp);
num = num >>> 4; // 右移4位
}
}
Part 2 进制转换-查找表
注意: 如果数据出现了对应关系,而且对应关系的一方是有序的数字编号,并作为 角标使用,这时候必须要想到数组的应用。就可以將這些数据存储在数组中,运結果作為下标查數組中對應的元素就可以,叫做查找法。
0,1,2,3,4,5,6,7,8,9,A, B, C, D, E, F
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
public static void main(String[] args) {
toHex_2(60);//C3
}
static void toHex_2(int num) {
if(num==0) {
System.out.print("0");
return; //不写的话还会往下运行
}
//定义一个对应关系表
char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//查表会查到比较多的数据 数据一多 就先存储起来 再进行操作 所以定义一个数组 作为临时容器
char[] arr = new char[8];
int pos = arr.length;
while(num!=0)
{
int temp = num &15;
arr[--pos] = chs[temp];
num=num>>>4;
}
for(int x=pos;x<arr.length;x++) {
System.out.print(arr[x]);
}
System.out.println();
}
Part 3 二进制、八进制、十六进制的整合
取一个十进制的2、8、16进制的表现形式
public static void main(String[] args) {
toHex(60);
toBinary(-6);
toOctal(26);
// System.out.print(Integer.toBinaryString(6)); 直接调用二进制转换方法
}
//十进制转换为十六进制
public static void toHex(int num) {
trans(num,15,4);
}
//十进制转换为二进制
public static void toBinary(int num) {
trans(num,1,1);
}
//十进制转换为八进制
public static void toOctal(int num) {
trans(num,7,3);
}
static void trans(int num,int base,int offset) {
if(num==0) {
System.out.print("0");
return;
}
//定义一个对应关系表
char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
//查表会查到比较多的数据 数据一多 就先存储起来 在进行操作 所以定义一个数组 临时容器
char[] arr = new char[32];
int pos = arr.length; //定义指针
while(num!=0)
{
int temp = num &base;
arr[--pos] = chs[temp];
num = num >>> offset;
}
for(int x=pos;x<arr.length;x++) {
System.out.print(arr[x]);
}
System.out.println();
}
Part 4 查找法的练习题
使用查找法 查找星期数
public static void main(String[] args) {
System.out.print(getWeek(6));
}
static String getWeek(int num) {
if(num>7 || num<1)
{
return "错误的星期";
}
String[] weeks = {"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
return weeks[num];
}
}