Task1 变量、运算符、数据类型及位运算
1、变量
Python 中变量赋值不需要类型声明。每个变量在内存中创建,都包括变量的标识,名称和数据这些信息。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。等号(=)用来给变量赋值,等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值。变量名可以包括字母、数字、下划线、但变量名不能以数字开头,另外python 变量名是大小写敏感的,foo != Foo。
1.1 单变量赋值
sum = 100 # 赋值整型变量
miles = 1000.0 # 浮点型
name = "John" # 字符串
print("sum=",sum) # sum= 100
print("miles=",miles) # miles= 1000.0
print("name=",name) # name= John
1.2 多变量赋值
Python允许你同时为多个变量赋值。例如:
a = b = c = 1
以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。也可以为多个对象指定多个变量。例如:
a, b, c = 1, 2, “john”
以上实例,两个整型对象 1 和 2 分别分配给变量 a 和 b,字符串对象 “john” 分配给变量 c。
a = b = c = 1
d, e, f = 1, 2, "john"
print("a=",a) # a= 1
print("b=",b) # b= 1
print("c=",c) # c= 1
print("d=",d) # d= 1
print("e=",e) # e= 2
print("f=",f) # f= john
2 运算符
2.1 算术运算符
假设a=20,b=5
运算符
描述
实例
+
加:两个数相加
a+b输出结果为25
-
减:两个数相减
a-b输出结果为15
*
乘:两个数相乘或返回一个被重复若干次的字符串
a*b输出结果为100
/
除:两个数相除
a/b输出结果为4
%
取模:返回除法的余数
a%b输出结果为0
**
幂:返回a的b次幂
a**b输出结果为3200000
//
取整除:返回商的整数部分(向下取整)
10//3输出结果为3,-10//3的输出结果为-4a,b,c = 11, 6, 0
c = a + b
print("c的值为:", c) # 17
c = a - b
print("c的值为:", c)# 5
c = a * b
print("c的值为:", c) #66
c = a / b
print("c的值为:", c) #1.8333333333333333
c = a % b
print("c的值为:", c)# 5
# 修改变量 a 、b 、c
a,b = 2,3
c = a ** b
print("c的值为:", c) #8
a ,b = 10,5
c = a // b
print("c的值为:", c) # 2
2.2 比较运算符
假设a=20,b=5
运算符
描述
实例
==
等于:比较两个数是否相等
(a==b)输出结果为false
!=
不等于:比较两个数是否不相等
(a!=b)输出结果为true
>
大于:比较a是否大于b
(a>b)输出结果为true
<
小于:比较a是否小于b
(a
>=
大于等于:比较a是否大于等于b
(a>=b)输出结果为true
<=
小于等于:比较a是否小于等于b
(a<=b)输出结果为false
注意:
==, != 对比的是两个变量的值
if a == b:
print(" a 等于 b")
else:
print(" a 不等于 b")
if a != b:
print(" a 不等于 b")
else:
print(" a 等于 b")
if a < b:
print("a 小于 b")
else:
print("a 大于等于 b")
if a > b:
print("a 大于 b")
else:
print("a 小于等于 b")
# 修改变量 a 和 b 的值
a = 5
b = 20
if a <= b:
print("a 小于等于 b")
else:
print("a 大于 b")
if b >= a:
print("b 大于等于 a")
else:
print("b 小于 a")
2.3 逻辑运算符
假设a=20,b=5
运算符
描述
实例
and
与
(a >1)or (b>10)输出结果为false
or
或
(a >1)or (b>10)输出结果为true
not
非
not (a and b)返回false
2.4 位运算符
假设a = 0011 1100,b = 0000 1101
运算符
描述
实例
~
按位取反
(~b)输出结果为1111 0010
&
按位与
(a&b)输出结果为0000 1100
^
按位异或
(a^b)输出结果为0011 0001
< <
左移
(a<<2)输出结果为1111 0000
>>
右移
(a>>2)输出结果为0000 1111
2.5 其他运算符
运算符
描述
实例
is
是
‘world’ is ‘world’
not is
不是
6 is not 8
in
存在
4 in [2,3,4,5]
not in
不存在
1 not in [2,3,4,5]
注意:
is, is not 对比的是两个变量的内存地址
3 基本数据类型
基本数据类型主要包括整型(int)、浮点型(float)和布尔型(bool)
3.1 整型
整型
a = 1250
print(a, type(a)) # 1250
举例
找到一个整数的二进制表示,再返回其长度。
a = 2500
print(bin(a)) # 0b100111000100
print(a.bit_length()) # 12
3.2 浮点型
浮点型
print(2, type(2)) # 2
print(2., type(2.)) # 2.0
3.3 布尔型
布尔型
布尔 型变量只能取两个值, 即True 和 False 。当把布尔变量用在数字运算中,用 1 和 0 代表 True和 False。
print(True + True) # 2
print(True + False) # 1
print(True * False) # 0
除了直接给变量赋值 True 和 False ,还可以用 bool(X) 来创建变量,其中 X 可以是
基本类型:整型、浮点型、布尔型
容器类型:字符、元组、列表、字典和集合
例如:
bool 作用在基本类型变量: X 只要不是整型 0 、浮点型 0.0 , bool(X) 就是 True ,其余就是False 。
print(type(0), bool(0), bool(1)) # False True
print(type(10.31), bool(0.00), bool(10.31)) # False True
print(type(True), bool(False), bool(True)) # False True
确定 bool(X) 的值是 True 还是 False ,就看 X 是不是空,空的话就是 False ,不空的话就是 True 。
对于数值变量, 0 , 0.0 都可认为是空的。
对于容器变量,里面没元素就是空的
4 位运算
4.1 原码、反码和补码
二进制有三种不同的表示形式:原码、反码和补码,计算机内部使用补码来表示。
原码:就是其二进制表示(注意,有一位符号位)。
00 00 00 11 -> 3
10 00 00 11 -> -3
反码:正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反)。
00 00 00 11 -> 3
11 11 11 00 -> -3
补码:正数的补码就是原码,负数的补码是反码+1。
00 00 00 11 -> 3
11 11 11 01 -> -3
符号位:最高位为符号位,0表示正数,1表示负数。在位运算中符号位也参与运算。
4.2 利用位运算实现快速计算
通过 << , >> 快速计算n的倍数问题
n << 1 -> 计算 n2
n >> 1 -> 计算 n/2,负奇数的运算不可用
n << m -> 计算 n(2^m),即乘以 2 的 m 次方
n >> m -> 计算 n/(2^m),即除以 2 的 m 次方
1 << n -> 2^n
通过 ^ 快速交换两个整数。
a ^= b
b ^= a
a ^= b
通过 a & (-a) 快速获取 a 的最后为 1 位置的整数。
00 00 01 01 -> 5
&
11 11 10 11 -> -5
00 00 00 01 -> 1
00 00 11 10 -> 14
&
11 11 00 10 -> -14
00 00 00 10 -> 2
4.3 利用位运算实现整数集合
一个数的二进制表示可以看作是一个集合(0 表示不在集合中,1 表示在集合中)。比如集合 {1, 3, 4, 8} ,可以表示成 01 00 01 10 10 而对应的位运算也就可以看作是对集合进行的操作。
元素与集合的操作:
a | (1< 把 i 插入到集合中
a & ~(1< 把 i 从集合中删除
a & (1< 判断 i 是否属于该集合(零不属于,非零属于)
集合之间的操作:
a 补 -> ~a
a 交 b -> a & b
a 并 b -> a | b
a 差 b -> a & (~b)
整数在内存中是以补码的形式存在的,输出自然也是按照补码输出。
原文链接:https://blog.csdn.net/chutu2018/article/details/107458703