今天填补之前埋下的坑,首先介绍进制之间的转换,其次讨论一下
&
^
|
的计算
概念(摘抄自维基百科)
进制
进位制是一种记数方式,亦称进位计数法或位值计数法。利用这种记数法,可以使用有限种数字符号来表示所有的数值。一种进位制中可以使用的数字符号的数目称为这种进位制的基数或底数。若一个进位制的基数为n,即可称之为n进位制,简称n进制。现在最常用的进位制是十进制,这种进位制通常使用10个阿拉伯数字(即0-9)进行记数。
二进制
二进制(binary)在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示。
八进制
八进制是以8为底的进位制,使用数字0、1、2、3、4、5、6、7。
十进制
十进制是以10为基础数字系统, 是在世界上应用最广泛的进位制。
十六进制
十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F表示,其中:A~F相当于十进制的10~15,这些称作十六进制数字。
java程序中如何表示
代码语言:javascript复制public class NumberDemo {
public static void main(String[] args) { System.out.println("十进制直接书写数字即可:" 10); System.out.println("二进制的数字使用0B开头:" 0B10); System.out.println("八进制的数字使用数字0开头:" 011); System.out.println("十六进制的数字使用0X开头:" 0X11);
/* 输出结果为: 十进制直接书写数字即可:10 二进制的数字使用0B开头:2 八进制的数字使用数字0开头:9 十六进制的数字使用0X开头:17 */
}
}
进制间向十进制转化
二进制转为十进制:
- 二进制数:
1010
- 十进制:
二进制只有
0
和1
俩个数字组成部分。 计算方法: 将二进制从右侧开始计算:分别是
与数位上的0
或者1
相乘然后结果相加即可
八进制转为十进制:
- 八进制数:
6754
- 十进制:
八进制由
0-7
八个数字组成部分。 计算方法: 将八进制从右侧开始计算:分别是
与数位上的 数值 相乘然后结果相加即可
十六进制转为十进制:
- 十六进制数:
1A F5
- 十进制:
十六进制由
0-9 A-F
十六个数字组成部分。 计算方法: 将十六进制从右侧开始计算:分别是
与数位上的 数值 相乘然后结果相加即可
十进制向其他进制转化
十进制转为二进制:
- 使用短除法
将十进制15转为二进制数 余数 15 / 2 = 7 ……………… 1 7 / 2 = 3 ………………… 1 3 / 2 = 1 …………………… 1 1 / 2 = 0 …………………… 1
将余数倒置: 1111 就是二级制的15
将十进制10转为二进制数 余数 10 / 2 = 5 ……………… 0 5 / 2 = 2 ………………… 1 2 / 2 = 1 …………………… 0 1 / 2 = 0 …………………… 1
将余数倒置: 1010 就是二级制的10
十进制转为八进制:
- 使用短除法
将十进制15转为八进制数 余数 15 / 8 = 1 ……………… 7 1 / 8 = 0 ………………… 1
将余数倒置: 17 就是八级制的15
十进制转为十六进制:
- 使用短除法
将十进制6901转为十六进制数 余数 6901 / 16 = 431 ……………… 5 431 / 16 = 26 …………………… F 26 / 16 = 1 ………………………… A 1 / 16 = 0 …………………………… 1
将余数倒置: 1AF5 就是十六级制的6901
^ & | >> << 运算符
代码语言:javascript复制十进制运算:
public class NumAndOrDemo {
public static void main(String[] args) { //与运算 System.out.println(7 & 9); //或运算 System.out.println(2 | 5); //异或运算 System.out.println(10 ^ 5); //一个数字对同一个数异或两次,数值不变 System.out.println(10 ^ 5 ^ 5);
System.out.println("-----"); //右移 System.out.println(8 >> 3); //左移 System.out.println(2 << 3); }
/* 打印结果: 1 7 15 10 ----- 1 16 */}
解释:
首先,这几个运算符的计算,是使用二进制进行计算的,计算完成之后再重新转为10进制;
& 同位数字相同则为1,否则为0
7 & 9 = 1二进制的 7 = 0 1 1 1二进制的 9 = 1 0 0 1 0 0 0 1将0001 转为十进制为1,所以 7 & 9 = 1
| 同位数字有1则为1,全是0为0
2 | 5 = 7二进制的 2 = 0 0 1 0二进制的 5 = 0 1 0 1 0 1 1 1将0111 转为十进制为7,所以 2 | 5 = 7
^ 同位数字不同则为1,同位数字相同则为0
可以得出结论,一个数异或它本身结果为0
10 ^ 5 = 15二进制的 10 = 1 0 1 0二进制的 5 = 0 1 0 1 1 1 1 1将1111 转为十进制为15,所以 10 ^ 5 = 15
^ 同位数字不同则为1,同位数字相同则为0
10 ^ 5 ^ 5 = 10二进制的 10^5 = 1 1 1 1二进制的 5 = 0 1 0 1 1 0 1 0
将1010 转为十进制为10,所以 10 ^ 5 ^ 5 = 10
可以得出结论,一个数字对同一个数异或两次,数值不变
8 >> 3 = 1 :读法,8向右移3位
二进制 8 = 1 0 0 0右移 3 位 = 0 0 0 1
0001 转为10进制为 1
结论:任意数向右移,数值变小,右移n位,原数字除以2的n次方 取整数
2 << 3 = 16 :读法,2向左移3位
二进制 2 = 0 0 0 1 0右移 3 位 = 1 0 0 0 0
10000 转为10进制为 16
结论:任意数向左移,数值变大,左移n位,原数字乘以2的n次方
文章中源代码分享:https://github.com/upuptop/WeChatQuXueChengXu