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

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值