day4-循环关键字和位运算
循环关键字
1.continue
continue是关键字,只能用在循环体中
当执行循环体的时候,如果遇到continue,当次循环直接结束,马上进入下一个循环的判断(遇到continue结束一次循环)
for x in range(3):
print('======')
continue
print('++++++')
print('------')
2.break
break是关键字,只能在循环体中使用
当执行循环体的时候,如果遇到break,整个循环直接结束
for x in range(4):
print('&&&&&&&')
break
print('+++++++')
print('-------')
3.while循环和break一起使用
while True:
需要重复的操作
if 循环结束的条件:
break
# 用while计算1+2+3+...+100
sum1 = 0
num = 1
while True:
sum1 += num
num += 1
if num > 100:
break
print(sum1)
4.else
(1)python中完整的for
for 变量 in 序列:
循环体
else:
代码段
(2)python中完整的while
while 条件语句:
循环体
else:
代码段
在for循环或者while循环后面加else结构不会影响原循环的执行
如果循环是正常结束的,循环结束后会执行else后面的代码段;如果循环是因为break而结束,那么else后面的代码段就不会执行
(可以根据else后面的代码是否执行来判断循环在执行过程中有没有遇到break)
for x in range(4):
print('=====')
break
else:
print('end!')
进制
计算机存储数据只是存储二进制数据(计算机只有存储数字的能力,并且存的是这个数字二进制补码)
十进制
基数:0,1,2,3,4,5,6,7,8,9 (789, 1297, 104)
进位:逢10进1 (8+2 -> 10, 9+5 -> 14)
位权:10的N次方(N从0开始) 2341 -> 1*10**0 + 4*10**1 + 3*10**2 + 2*10**3
程序中的表示方式:直接写
二进制
基数:0,1 (001, 110, 11011)
进位:逢2进1 100 + 110 ->
位权:2的N次方 (N从0开始) 101011 -> 1*2**0+1*2**1+0*2**2+1*2**3+0*2**4+1*2**5 = 1+2+8+32=43
程序中的表示方式:加前缀0b/0B
八进制
基数:0,1,2,3,4,5,6,7 (123, 456,14567)
进位:逢8进1
位权:8的N次方 (N从0开始) 123 -> 3*8**0+2*8**1+1*8**2 = 3+16+64=83
程序中的表示方式:加前缀0o/0O
"""
十六进制
基数:0~9,a/A(10)~f/F(15) (af, 10ee, abcd, FFB6C1)
进位:逢16进1
位权:16的N次方 (N从0开始) af -> f*16**0 + a*16**1 = 15*1 + 10*16 = 175
程序中的表示方式:加前缀0x/0X
进制转换
其他进制转10进制:技术乘以位权的和
# 方法:print
# 0b1011 -> 2**0 + 2**1 + 2**3 = 11
# 0o56 -> 6*8**0 + 5*8**1 = 6 + 40 = 46
# 0x12f -> 15*16**0 + 2*16**1 + 1*16**2 = 15+32+256 = 303
10进制转其他进制(辗转取余法)
# 转二进制方法:bin - 将其他进制转二进制
# 转八进制方法:oct
# 转16进制方法:hex
原码,反码和补码
正数的原码,反码和补码一样
(1)原码:符号位+真值
真值:数字绝对值的二进制
符号位:0表示正,1表示非
10的真值:1010, -10的真值:1010
10的原码:01010, -10的原码:11010
(2)反码 - 符号位不变,其他位取反
-10的反码(1字节):11110101
(3)补码 - 反码加1
-10的补码:11110110
# 内存最小单位是位(bit)
# 1字节 = 8位 (内存开辟的最小单位是字节)
# 1kb = 1024字节
# 1Mb = 1024kb
# 1G = 1024MK
# 1T = 1024G
# 计算:2 - 3
# 2的原码: 00000010
# 2的补码: 00000010
# -3的原码: 10000011
# -3的补码:11111101
# 原码计算:00000010 + 10000011 = 10000101 -> -5
# 补码计算:00000010 + 11111101 = 11111111(补码) -> 11111110(反) ->10000001 -> -1
位运算
&(按位与),|(按位或),^(按位异或),~(按位取反),<<(左移), >>(右移)
位运算的特点:运算效率高,内存消耗少;但是完成复杂运算的时候难度高
(1)快速判断数字的奇偶性:数字 & 1
print(10 & 1)
print(102 & 1)
print(228 & 1)
print(15 & 1)
print(21 & 1)
print(17 & 1)
(2)快速乘2操作:数字 << 1
print(3 << 1)
print(12 << 1)
print(-5 << 1)
(3)快速整除2操作:数字 >> 1
print(4 >> 1)
print(6 >> 1)
print(9 >> 1) # 4
print(-9 >> 1) # -5