走在前面的废话:好像每天跟进一次有点力不从心xwx
接着上篇内容,应该到位运算了:
感觉大部分高级语言中涉及位运算的部分比较少(?
位运算:原码、反码、补码:
在最前面的是符号位(0为正1为负)
原码:顾名思义,直接翻译成二进制(符号位在最前面)
反码:负数反码只对数值位取反,正数的话全部取反。
补码: 正数的补码就是原码,负数的补码是反码+1
(好像这部分是和计算机内部数据传输有关,不是很了解···)
位运算符:按位非~,按位与&按位或|,按位异或^ ,左右位移<<,>>:
位运算符适合用于特殊的数据处理
以及部分便于在二进制中表达的操作:如取2^n倍(左右位移)快速交换变量值(^ =)
原理(?)筛选部分位置的数值(也可以屏蔽),如a&(-a)
python中处理这类二进制数据:bin()
为了获得负数补码,需要手动和0xffffffff按位与(0xffffffff 二进制下全是1)(有点运算中强制类型转换的味道)再输出
如果不这么做的话得到的只是数值的二进制,带个负号。
条件/分支语句:
老朋友IF:
if(条件):【缩进】表达式
老朋友的老基友else:
if(条件):【缩进】表达式
else:【缩进】表达式
*老朋友的新欢elif(C里面好像是else if)用法没啥差别
python里同样有逻辑短路机制。
【没有switch了哭哭】
assert关键词(断言)【我好像一点都不记得了】
assert(条件) , 如果为False,就崩溃,并抛出AssertionError(还是可以异常处理,存在意义不明)
循环语句:
老朋友while():
while(布尔表达式):【缩进】代码块
生面孔while-else:
while循环成功退出后会执行一次else,如果强制跳出(break)就会忽略else的内容
适合循环最后一步和前面不一样的情况(C里面深恶痛绝)
不能再老的朋友for:
看起来平平常常,实际上是个很广泛的迭代循环:
for 迭代变量(有循环变量的味道) in 可迭代对象:【缩进】代码块
这个迭代对象有够广的,字符串,列表元组字典()字典默认迭代key,以及枚举对象和生成器
迭代变量还可以拆包,多个变量一次对应一包数据
for-else:和while-else一个模子里出来的
常用函数range([start,]stop,[step = 1]),从start开始到stop脚跟前停下
生成一个range对象供迭代(它不是list!)
常用函数enumerate(可迭代对象,[初始索引 = 0])
给可迭代对象加一个索引再迭代
其他有关关键词:break,pass,continue
推导式:
数据有规律但是懒得初始化?试试推导式
列表推导式:[expr for val in collection if condition]
元组推导式:两边变括号---好像就是标准生成器吗(?
字典推导式:expr 变成 key_expr : value_expr,两边变花括号
集合推导式:只变花括号
都可以用next()拉取下一个对象,所以这是个语法糖···?
【可以推导式套推导式,但是会很晕···】