一、进制和位运算
1、X进制
X进制(十进制、二进制、八进制、十六进制):
每一位只允许出现 0~X-1 这几个数字,逢X进一,基是X, 每一位有一个权值大小是X的幂次。 其表示的数值可以写成按位权展开的多项式之和。
2、二进制有符号和无符号
规则:把二进制数中的最高位(最左边的那位)用作符号位
- 对于有符号数,最高位被计算机系统规定为符号位(0为正,1为负)
- 对于无符号数,最高位被计算机系统规定为数据位
- +1 = 0000 0000 0000 0001
- -1 = 1000 0000 0000 0001
数字在计算机中,是用二进制补码的形式来保存的,因此-1 +1需要按照补码进行相加才是正确的结果。
3、原码、反码、补码
规则:
- 正数:原码 = 反码 = 补码
- 负数:反码 = 符号位不变,其他位取反; 补码 = 反码+1
1 | 1的原码:0000 0000 0000 0001 |
重新计算 -1+1 结果:1
2
3
41111 1111 1111 1111
0000 0000 0000 0001
---------------------------
0000 0000 0000 0000 # 高位舍去,所以结果是0
补码转回原码:
- 原码 = 补码的符号位不变 –>数据位取反–> 尾+1
1 | -1的补码:1111 1111 1111 1111 |
4、进制间转换
1 | # 10进制转为2进制 |
5、位运算
直接操作二进制,省内存,效率高
- & 按位与,全1为1否则为0
- | 按位或,有1就1否则为0
- ^ 按位异或,不同为1否则为0
- ~ 按位取反
- << 按位左移,各二进位全部左移n位,高位丢弃,低位补0
- >> 按位右移,各二进位全部右移n位,保持符号位不变
注意事项:
- 二进制左移一位,变成原来的二倍,相当于乘2;相反,右移一位相当于除2
- 左移可能会改变一个数的正负性,右移不会改变一个数的符号
- 左移用途:快速计算一个数乘以2的n次方 (8<<3 等同于8*2^3)
- 右移用途:快速计算一个数除以2的n次方 (8>>3 等同于8/2^3)
持续更新…
最后更新: 2018年12月04日 16:46