引言
对于可能接触到通讯行业或是物联网的开发工作者,一般会面对十进制、二进制、十六进制的转换工作,不仅仅是体现在代码上,有时候也需要用肉眼来进行快速的转化,以获取协议指令中的信息。
今天通过简单的整理,特此将这三种转化整理成一张表,并配上三个单独的执行程序。作为日后记忆的参考;而三个可执行程序是为了每天进行练习。
进制对照表
其中红色框代表比较有特点的二进制,绿色框代表十六进制和十进制完全相同的数。
练习程序
二进制识读练习
代码中,使用一个随机数,随机产生0-15之间任意的数,并格式化为4比特位的二进制,两秒输出一个,十个一换行,无限循环。大家可以根据控制台输出的二进制数快速的在心中说出对应的十六进制或者十进制的数字,这样长期练习应该可以把三种进制之间的转化玩的很溜。
/**
* 死循环输出0-15之间任意的数字,然后显示二进制,在脑海中回想对应的16或10进制。
*
* @author mht
* @date 2018年10月30日上午10:28:25
*/
public class 二进制练习 {
public static final String[] ZEROS = { "", "0", "00", "000" };
public static void main(String[] args) throws InterruptedException {
Random rdm = new Random();
int lineCount = 0;
for (;;) {
int out = rdm.nextInt(16);
TimeUnit.SECONDS.sleep(2);
if (lineCount == 10) {
System.out.println();
lineCount = 0;
}
System.out.print(format4Bits(out));
lineCount++;
}
}
private static String format4Bits(Integer unformatNum) {
if (unformatNum == null)
throw new InvalidParameterException("参数异常!");
String binaryString = Integer.toBinaryString(unformatNum);
int diff = 4 - binaryString.length();
return ZEROS[diff] + binaryString + " ";
}
}
十六进制识读练习
和二进制识读练习类似,控制台会随机输出一个0-15之间的任意数,转化为十六进制输出,我们需要在心中快速念出对应的二进制和十进制的数字。勤加练习,相信应该可以找到一定的技巧。
/**
* 死循环输出0-15之间任意的数字,然后显示十六进制,在脑海中回想对应的2或10进制。
* @author mht
* @date 2018年10月30日上午10:29:52
*/
public class 十六进制练习 {
public static void main(String[] args) throws InterruptedException {
Random rdm = new Random();
int count = 0;
for (;;) {
int out = rdm.nextInt(16);
TimeUnit.SECONDS.sleep(2);
if (count == 10) {
System.out.println();
count = 0;
}
System.out.print(Integer.toHexString(out).toUpperCase() + " ");
count++;
}
}
}
十进制识读练习
/**
* 死循环输出0-15之间任意的数字,然后显示,在脑海中回想对应的16或2进制。
* @author mht
* @date 2018年10月30日上午10:29:35
*/
public class 十进制练习 {
public static void main(String[] args) throws InterruptedException {
Random rdm = new Random();
int count = 0;
for (;;) {
int out = rdm.nextInt(16);
TimeUnit.SECONDS.sleep(2);
if (count == 10) {
System.out.println();
count = 0;
}
System.out.print(out + " ");
count++;
}
}
}
学习感想
此练习最好每天坚持5到10分钟,坚持一周到两周,效果应该会体现出来。
随着对进制的理解,我们应该逐渐地不再惧怕进制的转化和运算。