进制转换以及位运算
1进制
1.1 进制之间的相互转换
1.1.1 二进制转为八进制、十进制、十六进制
1.1.1.1 二进制转为八进制
根据十进制负数转八进制过程可知,二进制转八进制遵循的规则为取三合一,位数不够左补0,如有疑问,请看十进制负数转八进制详情。
1.1.1.2 二进制转为十进制
口诀:整数(正整数、负整数)二进制用数值乘以2的幂次依次相加、小数二进制用数值乘以负幂次然后依次相加
1.1.1.2.1 整数
口诀:位数补齐看首位,首位为0为正,首位为1为负。
1.1.1.2.1.1 正整数
如下图:
1.1.1.2.1.2 负整数
如下图:
1.1.1.2.2 小数
如下图:
1.1.1.3 二进制转为十六进制
根据十进制负数转十六进制过程可知,二进制转十六进制遵循的规则为取四合一,位数不够左补0,如有疑问,请看十进制负数转十六进制详情。
1.1.2 八进制转为二进制、十进制、十六进制
1.1.2.1 八进制转二进制
口诀:一分三,可求出八进制转二进制
如图:
1.1.2.2 八进制转十进制
1.1.2.2.1 小数
如下图:
1.1.2.2.2 正整数
如下图:
1.1.2.3 八进制转十六进制
八进制转为十六进制有两种方式,
- 先将八进制转为二进制,在将二进制转为十六进制
- 先将八进制转为十进制,在将二进制转为十六进制
相关方式查看其他对应的转换规则。
1.1.3 十进制转为二进制、八进制、十六进制
1.1.3.1 十进制小数
十进制小数转二进制、八进制、十进制使用按乘进制数取整的方式,如下
1.1.3.1.1 十进制转二进制
小数转换不一定能算尽,只能算到一定精度 的位数为止,故会产生一定误差,当然位数越多,误差越小。
1.1.3.1.2 十进制转八进制
小数转换不一定能算尽,只能算到一定精度 的位数为止,故会产生一定误差,当然位数越多,误差越小。
1.1.3.1.3 十进制转十六进制
小数转换不一定能算尽,只能算到一定精度 的位数为止,故会产生一定误差,当然位数越多,误差越小。
1.1.3.2 十进制整数
十进制整数转二进制、八进制、十进制使用的是除进制数取余的方式,如下
1.1.3.2.1 十进制转二进制
二进制为逢二进一
1.1.3.2.2 十进制转八进制
八进制为:1、2、3、4、5、6、7,逢八进一
1.1.3.2.3 十进制转十六进制
十六进制为:1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,逢十六进一
1.1.3.3 十进制负数
负数转二进制、八进制或者十六进制涉及到三个概念
- 原码:原码就是取负数的绝对值得二进制数,并且最高位为符号位,负数的最高位为1
- 反码:反码就是在原码的基础上进行取反操作,也就是位数为1变为0,位数为0变为1,符号位不变.
- 补码:补码就是在反码的基础上+1就得到了这个数的补码。
1.1.3.3.1 十进制转二进制
如下图:
1.1.3.3.2 十进制转八进制
如下图:
1.1.3.3.3 十进制转十六进制
如下图:
1.1.4 十六进制转为二进制、八进制、十进制
1.1.4.1 十六进制转为二进制
口诀:一分四得二进制
如下图:
1.1.4.2 十六进制转为八进制
十六进制转为八进制有两种方式
- 先将十六进制转为二进制,在将二进制转为八进制。
- 先将十六进制转为十进制,在将十进制转为八进制。
具体的转换过程查看对应的转换逻辑。
1.1.4.3 十六进制转为十进制
如下图:
1.2 位运算
1.2.1 按位与 &
1.2.1.1 规则
两个相应的二进制位中都为1,该位的结果值为1
1.2.1.2 示例
//对应布尔代数的与
101010
& 110011
= 100010
1.2.1.3 场景
- 判断奇偶性
if(n & 1 == 1){ //(n&1 == 0)//n是偶数 //n是奇数 }
- 清零(将一个单元与0进行位与运算结果为零)
1.2.2 按位或 |
1.2.2.1 规则
两个相应的二进制位中只要有一个为1,那么值就是1。
1.2.2.2 示例
//对应布尔代数的或
101010
| 110011
= 111011
1.2.3 异或 ^
1.2.3.1 规则
两个相应的二进制位值不同,则为1,否则为0。例:
1.2.3.2 示例
101010
^ 110011
= 011001
1.2.3.3 场景
- 异或可以用在对两个数进行交换的情况中
a = a^b b = a^b a = a^b
1.2.4 取反运算 ~
1.2.4.1 规则
用来对一个二进制数按位取反,将0变成1,1变成0。
1.2.4.2 示例
//对应布尔代数的非
~ 00110000
= 11001111
1.2.4.3 场景
- 求相反数: ~a + 1
1.2.5 左移 <<
1.2.5.1 规则
m<<n,把m的二进制数左移n位,高位超出n位都舍弃,低位补0
1.2.5.2 示例
5<<2 =20
1.2.5.3 场景
- m < < n = m ∗ 2 n m<<n = m*2^n m<<n=m∗2n
1.2.6 右移 >>
1.2.6.1 规则
m>>n,把m的二进制数右移n位,m为正数,高位全部补0,m为负数,高位全部补1。
1.2.6.2 示例
5>>2 =1
1.2.6.3 场景
- m > > n = m / 2 n m>>n = m/2^n m>>n=m/2n
1.2.7 无符号右移 >>>
1.2.7.1 规则
m>>>n,整数m表示的二进制右移n位,不论正负数,高位都补0
1.2.7.2 示例
15>>>2 =3