public class DemoBinary {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(getBinary(8));
System.out.println(getHex(60));
System.out.println(getHexByIndex(60));
}
/**
*
* 十进制转二进制的程序体现的过程
*/
public static String getBinary(int num) {
StringBuilder sb = new StringBuilder();
while (num > 0) {
sb.append(num % 2);
num = num / 2;
}
return sb.reverse().toString();
}
/**
* 十进制转十六进制的体现过程
*/
public static String getHex(int num) {
StringBuilder sb = new StringBuilder();
// 注意在内存中都是32 ,二进制中每4为来换算16进制,所以有8个4对
for (int i = 0; i < 8; i++) {
// num & 15 就能获取最后的4位 如果大于9就是16进制值中的ABCDEF
int temp = num & 15;
if (temp > 9) {
sb.append((char) (temp - 10 + 'A'));
} else {
sb.append(temp);
}
num = num >>> 4;
}
return sb.reverse().toString();
}
/**
*
* 查表法(十进制转换十六进制的转换)
* 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 与其相对于的下标
* 每一次&15后的值作为索引去查询
* 根据此规律,我可以将十六进制中的元素存储到数组中 这样比 -10+'A'更容易理解和方便
*/
public static String getHexByIndex(int num) {
char[] hexs={'0', '1', '2', '3', '4' ,'5' ,'6' ,'7' ,'8' ,'9', 'A' , 'B' , 'C' , 'D' , 'E' , 'F'};
StringBuilder sb=new StringBuilder();
for (int i = 0; i < 8; i++) {
int temp=num & 15;
sb.append(hexs[temp]);
num=num>>>4;
}
return sb.reverse().toString();
}
}