python基础知识(详解原码补码)


1 数据类型

1.1 基本数据类型

  python不用单独定义数据类型,需要某个变量直接赋值就可以使用。赋值赋什么它就是什么类型,并且后赋值的会覆盖先赋值。

a = 100
print(a)
print(type(a))

a = 0.1
print(a)
print(type(a))

a = hello
print(a)
print(type(a))

1.2 数据类型的转换

a = 100
print(type(a))      # int
print(float(a))     # 100.0
print(str(a))       # 100
print(bool(a))      # True

b = 1.9
print(type(b))      # float
print(int(b))       # 1
print(str(b))       # 1.9
print(bool(b))      # True

c = True
print(type(c))      # bool
print(int(c))       # 1
print(float(c))     # 1.0
print(str(c))       # 1.9

d = 1.9
print(type(d))      # str
# print(int(d))     类型转换只能一次(字符串——>浮点型——>整型)两次所以报错!
print(float(d))     # 1.9
print(bool(d))      # True

2 运算符

2.1 算术运算符

a = 1
b = 2

print(a + b)     
print(b - a)
print(a * b)
print(a ** b)    # a的b次方
print(a / b)
print(a // b)    # a整除b
print(a % b)     # a除以b的余数

2.2 关系运算符

a = 1
b = 2

print(a < b)  # True
print(a > b)  # False

print(a == b)  # False
print(a != b)  # True

x = abd
y = abc
print(x == y)  # 逐个比较每个字符的ASCII码
print(x < y)

score = float(input(输入你的成绩:))
# 注意,input所有键盘输入的内容都是字符串类型的
print(60 <= score <= 100)   #输出True或False

2.3 逻辑运算符

# and :与 (有一侧为假即为假)
a = 1
b = 2
print(b and a)  # 1,两边都是非0的数,就打印后一个
c = 0
print(c and a)  # 0,and两边只要有一边有0,结果就为0

# or :或 (有一侧为真即为真)
print(a or b)  # 1,两边都是非0的数,就打印前一个
print(c or b)  # 2,or两边只要有一边不为0,就打印不为0的数

# not
flag = True
print(not flag)  # False
print(a > c)  # True
print(not a > c)  # False

2.4 位运算

n1 = 0b0110  # 6
n2 = 0b1100  # 12

print(n1 & n2)
# 与运算:二进制进行运算,同真(1)则真(1),只有都是1时结果是1
# 0b0110
# 0b1100
# --------
# 0b0100     # 4
print(n1 | n2)
# 或运算:二进制进行运算,同假(0)则假(0),只有都是0时结果是0
# 0b0110
# 0b1100
# --------
# 0b1110     # 14
print(n1 ^ n2)
# 异或运算:二进制进行运算,只有不相同时为1,相同即为0
# 0b0110
# 0b1100
# --------
# 0b1010     # 10

前置知识:   计算机操作都是对补码进行操作,正数的补码就是原码,负数的补码要进行计算。   已知十进制负数,求二进制负数的计算:例如-7   (1) 原码(注意不要忘记符号位):1000 0000 0000 0000 0000 0000 0000 0111   (2) 反码(原码除符号位其他都取反):1111 1111 1111 1111 1111 1111 1111 1000   (3) 补码 (反码+1):1111 1111 1111 1111 1111 1111 1111 1001 -7的二进制也就是 (3) 中得出的。   已知二进制的负数,求对应的十进制:例如拿到-7的二进制(补码),1111 1111 1111 1111 1111 1111 1111 1001   (1) 拿到的是补码,首先减一:1111 1111 1111 1111 1111 1111 1111 1000   (2) 然后求得反码: 1000 0000 0000 0000 0000 0000 0000 0111   (3) 最后求得十进制:122+121+1*20 = 7,再加上符号位就是-7。 特别注意:取反时符号位不变,符号位即最高位

n1 = 0b0110
print(~n1)
# 取反:
# (1)原码(因为是正数,原码和补码相同):0000 0000 0000 0000 0000 0000 0000 0110
# (2)取反:0111 1111 1111 1111 1111 1111 1111 1001
# (3)取反后得到的是一个负数的补码,所以需要转换成原码才能转换成十进制
# (4)补码减一得到反码:0111 1111 1111 1111 1111 1111 1111 1000
# (4)反码取反得到原码:0000 0000 0000 0000 0000 0000 0000 0111
n = 0b00001100   # 12
print(n << 2)    # 48  相当于乘以2的2次方
print(n << 3)    # 96  相当于乘以2的3次方
print(n >> 2)    # 3   相当于处以2的2次方
print(n >> 3)    # 1   相当于处以(整除)2的3次方

3 格式化输出

name = 千颂伊
age = 30
print(她最喜欢 + str(age) + 岁的 + name)
print(她最喜欢%d岁的%s % (age, name))

4 进制转换

n = 149
result = bin(n)   # 十进制转二进制,0b10010101

result = oct(n)   # 十进制转八进制,0o225

result = hex(n)   # 十进制转十六进制,0x95

注意:是0b、0o、0x。(0是数字零,不是字母欧)

十六进制转二进制: 0x558 0b 0101(5) 0101(5) 1000(8) 0xbac 0b 1011(b) 1010(a) 1100©

十六进制转八进制(先转成二进制): 0x558 0b 0101(5) 0101(5) 1000(8) 0o 010(2) 101(5) 011(3) 000(0)

八进制转二进制: 0o 726 0b 111(7) 010(2) 110(5)

二进制转十六进制: 0b 1000 1010 0101 0111 0x 8 a 5 7

二进制转八进制: 0b 1000 1010 0101 0111 0o 1 0 5 1 2 7

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/290975.html

(0)
上一篇 2022年10月13日
下一篇 2022年10月13日

发表回复

登录后才能评论