python 整数逆位运算_Python学习 Task1 变量、运算符、数据类型及位运算

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值