进制
- 常见进制有二进制、八进制、十六进制等。应该重点掌握二进制和十六进制。
- 转为十进制——按位乘以权累加求和
- 0b1110计算为 1 * 2 ** 3 + 1 * 2 ** 2 + 1 * 2 * 1 + 0 * 2 ** 0 = 14
- 0x计算为 4 * 16 + 1 * 1 = 65 - 转为二进制
- 0xF8按位展开即可,得到0b1111 1000
- 127除以基数2,直到商为0为止,反向提取余数
- 转为十六进制
- 127除以基数16,直到商为0为止,反向提取余数
- 0b 1101 1111 前四位为12即十六进制的C,后四位为15,即十六进制的F,所以0b1101 1111 == CF
tips:
- 0b表示二进制(Binary system 简写 bin)
- 0o表示八进制(OCT 一般Linux权限的时候才会用到)
- 0x表示十六进制(Hex 有时候有些语言会用H来表示)
- divmod()函数可以将除法的商和余数记录下来
例子:
divmod(5,2)
结果:(1,2)
运算符 (Operater)
算数运算符
+ - * / **(平方)
- 自然除 / 结果是准确结果(表示有可能是浮点数),整除 //(向下取整,运算结果一定是整数)。注:2.x中的 / 和 // 都是整除。
位运算符(都是按二进制进行逻辑预算)
&(位与) |(位或) ~(按位取反) ^(异或) << >>
- 常用方式:乘除2的倍数,32 // 8 相当于32 >> 3(8 == 2 ** 3 )
<< 和 >> 是移位运算符 - ~12 等于-13 ,因为这涉及到符号位的运算。
Tips :
- 判断数的奇偶性:
1. 9 % 2 == 1
2. 9 & 2 == 1 - 异或:相异为一
同或:相同为一
比较运算符
- == != > < >= <=
- 返回一个bool值
- 链式比较操作符
4 > 3 >2
4 > mynumber >= 1
逻辑运算符
- 与或非 and or not
- 短路运算符
- and 如果第一个表达式为False,后面的就没有必要计算了,这个逻辑表达式一定是False
- or 如果第一个表达式True,后面的就没有必要计算了,这个逻辑表达式一定是True
Tips:
将常用的易于判断的表达式放在前面,可以提高代码的效率
赋值运算符(先计算右边)
- a = min(3,5)
- += -= *= /= %=
b += 1 => b = b + 1(不完全等价于,有些许区别) - x = y = z = 10
成员运算符(主要在容器里面使用)
in、 not in
身份运算符(主要在对象里面使用)
is、is not
原码、反码、补码的负数表示方法(正数的原码,补码,反码都一样)
-
原码(主要是给人看的)
5 => 0b101 , 1 => 0b1 , -1 => -0b1 , bin(-5) => ’ -0b101’ -
反码
正数的反码与原码相同;负数的反码符号位不变,其余按位取反 -
补码(主要是方便计算机运算)
正数的补码与原码相同;负数原码转为补码:负数的补码符号位不变,其余按位取反+1Tips:
- 二进制的最高位为符号位
- 反码和补码的符号位不变
- 补码的补码就是原码 -
负数表示法
- 早期数字电路中的CPU中的运算器实现了加法器,但是没有减法器,减法要转换成加法
- 负数在计算机中使用补码存储,-1 的补码为 1111 1111
- 5 - 1 => 5 + ( -1 ) 直觉上0b101 - 0b1,其实计算机中0b 0000 0101 + 0b 1111 1111 溢出位舍弃
- 10 ^ 9 等于 3,10 ^ ( -9 ) = -3
运算符优先级(由高到低)
规律:
- 算数运算符 > 位运算符 > 身份运算符 > 成员运算符 > 逻辑运算符
- 单目运算符 (例如正负)> 双目运算符(例如加减乘除)
Tips:
长表达式多用括号
表达式(Expression)
- 算术表达式
- 逻辑表达式
- 赋值表达式
Python中,赋值即定义,如果一个变量已经定义,赋值相当于重新定义