str:可以做加法运算,不能做减法运算
左移、右移操作符
- 只适用于int类型(含bool类型--可视为整数型)
- 左移:左侧溢出忽略;在最低位补0
- 右移:右侧溢出忽略;左侧补原来最高位的数值
- 左移,相当于✖️2
- 右移,相当于➗2(修正: 底除2)
正整数:底除和整除效果一样
负数:底除和整除结果不同
-7>>2
补充:
整数二进制存储的最高位称为“符号位”。
- 如果最高位是1,那就代表着这个整数是一个负数;
- 如果最高位是0,那么这个整数就是非负数(0或正整数)。
str:可以做加法运算,不能做减法运算
左移、右移操作符
正整数:底除和整除效果一样
负数:底除和整除结果不同
-7>>2
补充:
整数二进制存储的最高位称为“符号位”。
1. (取底除法)底除(floor division)://
(1)主要考虑整数和浮点数两类数据。
(2)floor VS //
math.floor()的返回值类型总是int
//有可能得到float类型值
import math
result = math.floor(10/3) ---- 3
result = 10//3 ---- 3
result = 10//3.0 ---- 3.0
(2) floor VS trunc
import math
result = math.floor(3.3) ---- 3
result = math.trunc(3.3) ---- 3
result = math.floor(-3.3) ---- -4
result = math.trunc(-3.3) ---- -3
2. 取余
示例1:
result = 10%3 ---- 1
result = 10 - (10//3)*3 ---- 1
result = 10%-3 ---- -2
result = 10 - (10//-3)*-3 ---- -2
示例2:判定是否是偶数
x = 101
if x%2 == 0
print('Yes')
else:
print('No')
示例3: 走马灯程序
from time import sleep
x = -1
while True:
x = x+1
x = x%5
print(x+1) ---- 连续输出1~5
sleep(0.5)
除法:/
(1)不能进行除0(float 0.0也不行)操作
(2)得到的结果,不是float就是exception
取反(补):(二进制)按位取反+1
0000-1010 -> 10
1111-0101 -> -11(按位取反)?
1111-0110 -> -10(按位取反+1)?
0000-1001 -> 9(按位取反)
0000-1010 -> 10(按位取反+1)
问题1: 计算机中,负数是怎么表达的?
为什么1111-0101 是 -11?
取反规律:
浮点型、字符串和NoneType:无法取反
整数类型和bool类型:取反得到整数型
~False = -1
~True = -2
数据类型:
Unicode码表(字符与数字的对应关系)
num = ord('A')
print(num) --- 65
char = chr(num)
print(char) ---- A
num = ord('华')
print(num) --- 21326
char = chr(num)
print(char) ---- 华
for num in range[65, 91)
print(chr(num)) ---- A~Z (26个英文字母)
内存地址
内存地址:内存中的每个字节,分配一个编号。
CPU寻址:CPU通过编号,找到该字节,从而
数据类型
数据类型,主要对数据进行以下规定和约束:
常用的进制
二进制: binary -> bin -> 0b/0B
八进制: octal -> oct -> 0o/00
十进制: decimal -> dec (默认情况,无需前缀)
十六进制: hexadecimal -> hex -> 0x/0X
十进制转八进制: “除8取余”(“除”,指的是“整除”)
18 对应二进制(由“余数”从下而上组成):22
2 2
0 2
八进制转十进制:乘方累加
比如:八进制16,对应十进制:8+6=14
八进制(n) |
3 |
2 |
1 |
0 |
十进制(8^n) |
512 |
64 |
8 |
1 |
|
|
|
|
|
八进制 |
|
|
1 |
6 |
十进制 |
|
|
8 |
6 |
十进制 VS 十六进制:同理。
二进制Bin VS 八进制Oct
规则:八进制1位,可拆分成二进制的3位
e.g. (八进制)0o77对应 (二进制)111 111
二进制Bin VS 十六进制Hex:
规则:十六进制1位,可拆分成二进制的4位(常用)
e.g. (十六进制)0xFF对应 (二进制)1111 1111;(十六进制)0xDD对应 (二进制)1101 1101;
python函数
十进制 -> 八进制:
oct(16) = ‘0o20’
八进制 -> 十进制:
int(‘0o20’, 8) = 16 int(‘0O20’, 8) = 16
十进制 -> 十六进制:
hex(255) = ‘0xff’
十六进制转 -> 十进制:
int(‘0XFF’, 16) = 255
100+1 = 101
0xff+0x1 = 256
0xff+0b0001 = 256
0o10*2 = 16
说明:直接运算时,无需添加单引号;使用int, oct, hex等进行进制转换时,需要对数值添加单引号
程序员们的“黑色幽默”
(1)呆萌的程序员们分不清万圣节(Oct 31)和圣诞节(Dec 25)
Oct 31 == dec 25
oct(25) = ‘0o31’;
(2)莎士比亚是“穿越”了的程序员?
To be or not to be
0x2b | ~0x2b = -1
十进制转二进制:
“除2取余”(“除”,指的是“整除”)
11 对应二进制(由“余数”从下而上组成):1011
5 1
2 1
1 0
0 1 ⬆️
二进制转十进制(1字节=1 Byte = 1B= 8b)
二进制(bit) |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
十进制(2^n) |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
十进制转二进制:
bin(10) = ‘0b1010’
bin(10)[2:].zfill(8) = ’00001010’ (补齐8个bits,前面填0)
二进制转十进制:
int(‘0b1010’, 2) = 10, (第一个参数,需要添加‘’,表示字符串;第二个参数表示:2进制)
int(‘1010’, 2) = 10
二进制 -> 十进制
给定n个比特,
能够表示的(十进制)数的个数是:2^n
(1)十进制:无符号整数
(2)十进制:有符号整数
无符号数整体向左平移了一半,得到正负数各一半。
0 1 2 3 4 5 6 7 | 8 9 10 11 12 13 14 15
-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7