第一次写博客,语言组织有点乱,初学java,总结下刚学知识点,还请多多指教。
Java的掩码运算
18世纪德国数理哲学大师莱布尼兹从他的传教士朋友鲍威特寄给他的拉丁文译本《易经》中,读到了八卦的组成结构,惊奇地发现其基本素数(0)(1),即《易经》的阴和阳,其进位制就是二进制,并认为这是世界上数学进制中最先进的。
20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,其运算模式正是二进制。它不但证明了莱布尼兹的原理是正确的,同时也证明了《易经》数理学是很了不起的。
生活中我们一般采用十进制,而在计算机内则采用二进制,而十六进制的采用是为了更好的表示二进制。
试问:怎么才能将十进制转换为二进制,或者八进制和十六进制呢?
一般我们会不断的取余数,存放在一个数组中然后将它逆置输出便得结果。
代码如何下:
import java.util.Arrays;
public class Demo3 {
public static void main(String[] args) {
int num = 10;
int mask = 0x1; // 掩码
int[] array = new int[0];
int i = 0;
while (num != 0) {
int last = mask & num;
array = Arrays.copyOf(array, array.length + 1);
array[i] = last;
i++;
num >>= 1;
}
for (int j = array.length - 1; j >= 0; j--) {
System.out.print(array[j] + "");
}
}
}
public class Demo4 {
public static void main(String[] args) {
String str = "4e2d"; // 十六进制数
int num = 0;
char[] ch = str.toCharArray();
for (int i = 0; i < ch.length; i++) {
char c = ch[i];
if (c >= 'a' && c <= 'z') {
num = num << 4 | (c - 'a' + 10);
} else {
num = num << 4 | (c - '0');
}
}
System.out.println(num);
}
}
第一个方法是传入一个字符串,和一个要转的进制,如果是二进制,则是1,如果是十六进制num是4.
第二个方法是传入一个整数,和一个要转换的掩码,最后返回的是一个字符串。