day2进制复习
进制转换一般方法是先想办法转换为二进制然后再转换到想要的进制
10进制转换为二进制:辗转取余法(除2取余)->转换为8进制就除8取余,,,,
2进制转换为8进制:将3位2进制转换为1位8进制
1 010 111 011 011 011 = 0o127333 (分3位来转换)
2进制转换为16进制:将4位2进制转换为1位16进制->分4位俩转换
运算符
1.逻辑运算符:and(逻辑与运算),or(逻辑或运算),not(逻辑非运算)
备注:所有的逻辑运算符的运算对象是布尔,结果也是布尔
1)and:两个都是True结果才是True,只要有一个是False结果就是False
逻辑与运算的短路现象:
当前面的表达式的值是False的时候,程序不会在执行and 后面的表达式
def function():
print('函数体')
False and function()
2)or:当两个都为False结果才是False,一个为True结果就为True
逻辑或运算的短路现象与逻辑与运算的相反,为True时不执行。
print(num%2==0 or num%5==0)
print(num%2==0 and num%5==0)
print(num % 10 == 0)
if num//10 != 3:
print(num%3==0 or num%7==0)
print((num % 3 == 0 or num % 7 == 0) and (num % 10 != 3))
3)not:True 变 False,False变True
2.赋值运算符:=,+=,-=,=,/=,%=,//=,*=
备注:不管是什么样的赋值运算符,最终的操作都是个哦变量赋值,所以赋值运算符的左边必须是变量
3.位运算
1)位运算操作的是数字的补码的每一位,位运算因为是直接操作计算机储存空间的每一位,所以执行效率一般比较高
2)&(按位与运算),|(按位或运算),^(按位异或),~(按位取反),<<(左移),>>(右移)
a. &(按位与运算):数字1 & 数字2 ->两个数字补码上相同位置上的数,如果都是1结果就是1,如果有一个是0结果就是0(位置一一对 应, 不够补0)
print(10 & 20) -> 0 (正数的补码与原码相同)
10(原码):00001010
20(原码):00010100
得:0
b. |(按位或运算):数字1 | 数字2,两个数字补码上相同位置的数,如果都是0结果才是0,只要有一个是1结果就是1
c.按位取反:数字->将数字补码上每一位的值由0变成1,1变成0
print(~10)->00001010(原码)->11110101(补码)->11110100(反)->10001011(原码) -> -11
d.^按位异或
数字1 ^ 数字2 -> 两个数补码上相同位置上的值如果相同结果是0,不同结果是1
print(-2^-3^-3) -> 一个书异或同一个数两次,结果就是这个数本身
e.<<(左移)
数字<< N ->当数字的补码整体左移n位,低位用0补充 -> 数字*(2**N)
print(10<<1) (左移1位)
10原码:00001010
10<<1: 00010100 = 20
f. >>(右移)
数字<< N ->当数字的补码整体右移n位,正数高位用0补充,负数高位补1 -> 数字//(2**n)
print(1>>1) = 0
print(-5 >> 1, -5//2) = -3
注意:位运算的应用
- 乘以2的次方和除以2的次方的操作(<<, >>)
- 数字 & 1 == 0 -> 偶数;数字&1 == 1 ->奇数
print(3&1,113&1)
print(2&1,100&1)
运算符的优先级:数学》比较》逻辑》赋值 (如果有括号先算括号里面的)
变量
1.什么是变量:变量是用来在程序中开辟空间存储数据
2.怎么声明变量?
1)语法:
变量名=值
2)说明:
变量名-程序员自己命名:
(要求)是标识符,不能是关键字
(规范)遵守PEP8文档里的命名规范-变量名中所有的字母都小写,如果变量名由多个单词组成单词之间用下划线隔开
(见名知意)-看见变量名就知道变量名中存储的数据
3.同时声明多个变量并赋多个值(注意位置的一一对应)
4.声明变量和给变量赋值的原理
现在内存中开辟空间存储数据(内存空间的大小由数据的大小动态的分配),然后再将保存数据的内存空间的地址赋给变量
用一个变量给另一个变量赋值的时候,实质是将变量中的地址赋给新的变量