# 这是一个注释

print(“Hello world”)

# Hello world

Hello world
‘’’ ‘’’ 或者 “”" “”" 表示区间注释，在三引号之间的所有内容被注释
【例子】多行注释

‘’’

‘’’
print(“Hello china”)

# Hello china

“”"

“”"
print(“hello china”)

# hello china

Hello china
hello china
2. 运算符

• 加 1 + 1
• 减 2 - 1
• 乘 3 * 4
/ 除 3 / 4
// 整除（地板除） 3 // 4
% 取余 3 % 4
** 幂 2 ** 3
【例子】

print(1 + 1) # 2
print(2 - 1) # 1
print(3 * 4) # 12
print(3 / 4) # 0.75
print(3 // 4) # 0
print(3 % 4) # 3
print(2 ** 3) # 8
2
1
12
0.75
0
3
8

= 大于等于 2 >= 4
< 小于 1 < 2
<= 小于等于 5 <= 2
== 等于 3 == 4
!= 不等于 3 != 5
【例子】

print(2 > 1) # True
print(2 >= 4) # False
print(1 < 2) # True
print(5 <= 2) # False
print(3 == 4) # False
print(3 != 5) # True
True
False
True
False
False
True

and 与 (3 > 2) and (3 < 5)
or 或 (1 > 3) or (9 < 2)
not 非 not (2 > 1)
【例子】

print((3 > 2) and (3 < 5)) # True
print((1 > 3) or (9 < 2)) # False
print(not (2 > 1)) # False
True
False
False

& 按位与 4 & 5

^ 按位异或 4 ^ 5
<< 左移 4 << 2

【例子】有关二进制的运算，参见“位运算”部分的讲解。

print(bin(4)) # 0b100
print(bin(5)) # 0b101
print(bin(~4), ~4) # -0b101 -5
print(bin(4 & 5), 4 & 5) # 0b100 4
print(bin(4 | 5), 4 | 5) # 0b101 5
print(bin(4 ^ 5), 4 ^ 5) # 0b1 1
print(bin(4 << 2), 4 << 2) # 0b10000 16
print(bin(4 >> 2), 4 >> 2) # 0b1 1
0b100
0b101
-0b101 -5
0b100 4
0b101 5
0b1 1
0b10000 16
0b1 1

【例子】

x, y = 4, 5
if x < y:
small = x
else:
small = y

print(small) # 4
4

【例子】

x, y = 4, 5
small = x if x < y else y
print(small) # 4
4

in 存在 ‘A’ in [‘A’, ‘B’, ‘C’]
not in 不存在 ‘h’ not in [‘A’, ‘B’, ‘C’]
is 是 “hello” is “hello”
not is 不是 “hello” is not “hello”
【例子】

letters = [‘A’, ‘B’, ‘C’]
if ‘A’ in letters:
print(‘A’ + ’ exists’)
if ‘h’ not in letters:
print(‘h’ + ’ not exists’)

# h not exists

A exists
h not exists
【例子】比较的两个变量均指向不可变类型。

a = “hello”
b = “hello”
print(a is b, a == b) # True True
print(a is not b, a != b) # False False
True True
False False
【例子】比较的两个变量均指向可变类型。

a = [“hello”]
b = [“hello”]
print(a is b, a == b) # False True
print(a is not b, a != b) # True False
False True
True False

is, is not 对比的是两个变量的内存地址
==, != 对比的是两个变量的值

【例子】

print(-3 ** 2) # -9
print(3 ** -2) # 0.1111111111111111
print(1 << 3 + 2 & 7) # 0
print(-3 * 2 + 5 / -2 - 4) # -12.5
print(3 < 4 and 4 < 5) # True
-9
0.1111111111111111
0
-12.5
True
3. 变量和赋值

Python 变量名是大小写敏感的，foo != Foo。
【例子】

teacher = “老马的程序人生”
print(teacher) # 老马的程序人生

【例子】

first = 2
second = 3
third = first + second
print(third) # 5
5
【例子】

myTeacher = “老马的程序人生”
yourTeacher = “小马的程序人生”
ourTeacher = myTeacher + ‘,’ + yourTeacher
print(ourTeacher) # 老马的程序人生,小马的程序人生

4. 数据类型与转换

int 整型 <class ‘int’> -876, 10
float 浮点型<class ‘float’> 3.149, 11.11
bool 布尔型<class ‘bool’> True, False

【例子】通过 print() 可看出 a 的值，以及类 (class) 是int。

a = 1031
print(a, type(a))

# 1031 <class ‘int’>

1031 <class ‘int’>

Python 里面万物皆对象（object），整型也不例外，只要是对象，就有相应的属性 （attributes） 和方法（methods）。

【例子】

b = dir(int)
print(b)

# ‘numerator’, ‘real’, ‘to_bytes’]

[‘abs’, ‘add’, ‘and’, ‘bool’, ‘ceil’, ‘class’, ‘delattr’, ‘dir’, ‘divmod’, ‘doc’, ‘eq’, ‘float’, ‘floor’, ‘floordiv’, ‘format’, ‘ge’, ‘getattribute’, ‘getnewargs’, ‘gt’, ‘hash’, ‘index’, ‘init’, ‘init_subclass’, ‘int’, ‘invert’, ‘le’, ‘lshift’, ‘lt’, ‘mod’, ‘mul’, ‘ne’, ‘neg’, ‘new’, ‘or’, ‘pos’, ‘pow’, ‘radd’, ‘rand’, ‘rdivmod’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘rfloordiv’, ‘rlshift’, ‘rmod’, ‘rmul’, ‘ror’, ‘round’, ‘rpow’, ‘rrshift’, ‘rshift’, ‘rsub’, ‘rtruediv’, ‘rxor’, ‘setattr’, ‘sizeof’, ‘str’, ‘sub’, ‘subclasshook’, ‘truediv’, ‘trunc’, ‘xor’, ‘bit_length’, ‘conjugate’, ‘denominator’, ‘from_bytes’, ‘imag’, ‘numerator’, ‘real’, ‘to_bytes’]

【例子】找到一个整数的二进制表示，再返回其长度。

a = 1031
print(bin(a)) # 0b10000000111
print(a.bit_length()) # 11
0b10000000111
11

【例子】

print(1, type(1))

# 1 <class ‘int’>

print(1., type(1.))

# 1.0 <class ‘float’>

a = 0.00000023
b = 2.3e-7
print(a) # 2.3e-07
print(b) # 2.3e-07
1 <class ‘int’>
1.0 <class ‘float’>
2.3e-07
2.3e-07

import decimal
from decimal import Decimal
Python 里面有很多用途广泛的包 (package)，用什么你就引进 (import) 什么。包也是对象，也可以用上面提到的dir(decimal) 来看其属性和方法。

【例子】getcontext() 显示了 Decimal 对象的默认精度值是 28 位 (prec=28)。

a = decimal.getcontext()
print(a)

# traps=[InvalidOperation, DivisionByZero, Overflow])

Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
b = Decimal(1) / Decimal(3)
print(b)

# 0.3333333333333333333333333333

0.3333333333333333333333333333
【例子】使 1/3 保留 4 位，用 getcontext().prec 来调整精度。

decimal.getcontext().prec = 4
c = Decimal(1) / Decimal(3)

# 0.3333

0.3333

【例子】

print(True + True) # 2
print(True + False) # 1
print(True * False) # 0
2
1
0

【例子】bool 作用在基本类型变量：X 只要不是整型 0、浮点型 0.0，bool(X) 就是 True，其余就是 False。

print(type(0), bool(0), bool(1))

# <class ‘int’> False True

print(type(10.31), bool(0.00), bool(10.31))

# <class ‘float’> False True

print(type(True), bool(False), bool(True))

# <class ‘bool’> False True

<class ‘int’> False True
<class ‘float’> False True
<class ‘bool’> False True
【例子】bool 作用在容器类型变量：X 只要不是空的变量，bool(X) 就是 True，其余就是 False。

print(type(’’), bool(’’), bool(‘python’))

# <class ‘str’> False True

print(type(()), bool(()), bool((10,)))

# <class ‘tuple’> False True

print(type([]), bool([]), bool([1, 2]))

# <class ‘list’> False True

print(type({}), bool({}), bool({‘a’: 1, ‘b’: 2}))

# <class ‘dict’> False True

print(type(set()), bool(set()), bool({1, 2}))

# <class ‘set’> False True

<class ‘str’> False True
<class ‘tuple’> False True
<class ‘list’> False True
<class ‘dict’> False True
<class ‘set’> False True

【例子】

print(isinstance(1, int)) # True
print(isinstance(5.2, float)) # True
print(isinstance(True, bool)) # True
print(isinstance(‘5.2’, str)) # True
True
True
True
True

type() 不会认为子类是一种父类类型，不考虑继承关系。
isinstance() 会认为子类是一种父类类型，考虑继承关系。

【例子】

print(int(‘520’)) # 520
print(int(520.52)) # 520
print(float(‘520.52’)) # 520.52
print(float(520)) # 520.0
print(str(10 + 10)) # 20
print(str(10.1 + 5.2)) # 15.3
520
520
520.52
520.0
20
15.3
5. print() 函数
print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)

【例子】没有参数时，每次输出后都会换行。

shoplist = [‘apple’, ‘mango’, ‘carrot’, ‘banana’]
print(“This is printed without 'end’and ‘sep’.”)
for item in shoplist:
print(item)

# banana

This is printed without 'end’and ‘sep’.
apple
mango
carrot
banana
【例子】每次输出结束都用end设置的参数&结尾，并没有默认换行。

shoplist = [‘apple’, ‘mango’, ‘carrot’, ‘banana’]
print(“This is printed with ‘end=’&’’.”)
for item in shoplist:
print(item, end=’&’)
print(‘hello world’)

# apple&mango&carrot&banana&hello world

This is printed with ‘end=’&’’.
apple&mango&carrot&banana&hello world
【例子】item值与’another string’两个值之间用sep设置的参数&分割。由于end参数没有设置，因此默认是输出解释后换行，即end参数的默认值为\n。

shoplist = [‘apple’, ‘mango’, ‘carrot’, ‘banana’]
print(“This is printed with ‘sep=’&’’.”)
for item in shoplist:
print(item, ‘another string’, sep=’&’)

# banana&another string

This is printed with ‘sep=’&’’.
apple&another string
mango&another string
carrot&another string
banana&another string

1. 原码、反码和补码
二进制有三种不同的表示形式：原码、反码和补码，计算机内部使用补码来表示。

00 00 00 11 -> 3
10 00 00 11 -> -3

00 00 00 11 -> 3
11 11 11 00 -> -3

00 00 00 11 -> 3
11 11 11 01 -> -3

1. 按位运算
按位非操作 ~
~ 1 = 0
~ 0 = 1
~ 把num的补码中的 0 和 1 全部取反（0 变为 1，1 变为 0）有符号整数的符号位在 ~ 运算中同样会取反。

## 00 00 01 01 -> 5 ~

11 11 10 10 -> -6

00 00 01 00 -> 4

1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0

00 00 01 00 -> 4

1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0

00 00 01 11 -> 7

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

## 00 00 01 01 -> 5 ^ 00 00 01 10 -> 6

00 00 00 11 -> 3

A: 00 00 11 00
B: 00 00 01 11

A^B: 00 00 10 11
B^A: 00 00 10 11

A^A: 00 00 00 00
A^0: 00 00 11 00

ABA: = AAB = B = 00 00 01 11

num << i 将num的二进制表示向左移动i位所得的值。

## 00 00 10 11 -> 11 11 << 3

01 01 10 00 -> 88

num >> i 将num的二进制表示向右移动i位所得的值。

## 00 00 10 11 -> 11 11 >> 2

00 00 00 10 -> 2
3. 利用位运算实现快速计算

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

00 00 00 01 -> 1

## 00 00 11 10 -> 14 & 11 11 00 10 -> -14

00 00 00 10 -> 2
4. 利用位运算实现整数集合

a | (1<<i) -> 把 i 插入到集合中
a & ~(1<<i) -> 把 i 从集合中删除
a & (1<<i) -> 判断 i 是否属于该集合（零不属于，非零属于）

a 补 -> ~a
a 交 b -> a & b
a 并 b -> a | b
a 差 b -> a & (~b)

【例子】C#语言输出负数。

class Program
{
static void Main(string[] args)
{
string s1 = Convert.ToString(-3, 2);
Console.WriteLine(s1);
// 11111111111111111111111111111101

    string s2 = Convert.ToString(-3, 16);
Console.WriteLine(s2);
// fffffffd
}


}
【例子】 Python 的bin() 输出。

print(bin(3)) # 0b11
print(bin(-3)) # -0b11

print(bin(-3 & 0xffffffff))

# 0b11111111111111111111111111111101

print(bin(0xfffffffd))

# 0b11111111111111111111111111111101

print(0xfffffffd) # 4294967293
0b11
-0b11
0b11111111111111111111111111111101
0b11111111111111111111111111111101
4294967293

Python中bin一个负数（十进制表示），输出的是它的原码的二进制表示加上个负号，巨坑。
Python中的整型是补码形式存储的。
Python中整型是不限制长度的不会超范围溢出。

# 欢迎使用Markdown编辑器

## 新的改变

1. 全新的界面设计 ，将会带来全新的写作体验；
2. 在创作中心设置你喜爱的代码高亮样式，Markdown 将代码片显示选择的高亮样式 进行展示；
3. 增加了 图片拖拽 功能，你可以将本地的图片直接拖拽到编辑区域直接展示；
4. 全新的 KaTeX数学公式 语法；
5. 增加了支持甘特图的mermaid语法1 功能；
6. 增加了 多屏幕编辑 Markdown文章功能；
7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能，功能按钮位于编辑区域与预览区域中间；
8. 增加了 检查列表 功能。

H2O is是液体。

210 运算结果是 1024.

## 如何插入一段漂亮的代码片

// An highlighted block
var foo = 'bar';


• 项目
• 项目
• 项目
1. 项目1
2. 项目2
3. 项目3
• 计划任务
• 完成任务

## 创建一个表格

### SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如：

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

## 创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

## 注释也是必不可少的

Markdown将文本转换为 HTML

## KaTeX数学公式

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.

## 新的甘特图功能，丰富你的文章

• 关于 甘特图 语法，参考 这儿,

## UML 图表

• 关于 Mermaid 语法，参考 这儿,

## FLowchart流程图

• 关于 Flowchart流程图 语法，参考 这儿.

## 导出与导入

### 导入

1. 注释
在 Python 中，# 表示注释，作用于整行。
【例子】单行注释

# 这是一个注释

print(“Hello world”)

# Hello world

Hello world
‘’’ ‘’’ 或者 “”" “”" 表示区间注释，在三引号之间的所有内容被注释
【例子】多行注释

‘’’

‘’’
print(“Hello china”)

# Hello china

“”"

“”"
print(“hello china”)

# hello china

Hello china
hello china
2. 运算符

• 加 1 + 1
• 减 2 - 1
• 乘 3 * 4
/ 除 3 / 4
// 整除（地板除） 3 // 4
% 取余 3 % 4
** 幂 2 ** 3
【例子】

print(1 + 1) # 2
print(2 - 1) # 1
print(3 * 4) # 12
print(3 / 4) # 0.75
print(3 // 4) # 0
print(3 % 4) # 3
print(2 ** 3) # 8
2
1
12
0.75
0
3
8

= 大于等于 2 >= 4
< 小于 1 < 2
<= 小于等于 5 <= 2
== 等于 3 == 4
!= 不等于 3 != 5
【例子】

print(2 > 1) # True
print(2 >= 4) # False
print(1 < 2) # True
print(5 <= 2) # False
print(3 == 4) # False
print(3 != 5) # True
True
False
True
False
False
True

and 与 (3 > 2) and (3 < 5)
or 或 (1 > 3) or (9 < 2)
not 非 not (2 > 1)
【例子】

print((3 > 2) and (3 < 5)) # True
print((1 > 3) or (9 < 2)) # False
print(not (2 > 1)) # False
True
False
False

& 按位与 4 & 5

^ 按位异或 4 ^ 5
<< 左移 4 << 2

【例子】有关二进制的运算，参见“位运算”部分的讲解。

print(bin(4)) # 0b100
print(bin(5)) # 0b101
print(bin(~4), ~4) # -0b101 -5
print(bin(4 & 5), 4 & 5) # 0b100 4
print(bin(4 | 5), 4 | 5) # 0b101 5
print(bin(4 ^ 5), 4 ^ 5) # 0b1 1
print(bin(4 << 2), 4 << 2) # 0b10000 16
print(bin(4 >> 2), 4 >> 2) # 0b1 1
0b100
0b101
-0b101 -5
0b100 4
0b101 5
0b1 1
0b10000 16
0b1 1

【例子】

x, y = 4, 5
if x < y:
small = x
else:
small = y

print(small) # 4
4

【例子】

x, y = 4, 5
small = x if x < y else y
print(small) # 4
4

in 存在 ‘A’ in [‘A’, ‘B’, ‘C’]
not in 不存在 ‘h’ not in [‘A’, ‘B’, ‘C’]
is 是 “hello” is “hello”
not is 不是 “hello” is not “hello”
【例子】

letters = [‘A’, ‘B’, ‘C’]
if ‘A’ in letters:
print(‘A’ + ’ exists’)
if ‘h’ not in letters:
print(‘h’ + ’ not exists’)

# h not exists

A exists
h not exists
【例子】比较的两个变量均指向不可变类型。

a = “hello”
b = “hello”
print(a is b, a == b) # True True
print(a is not b, a != b) # False False
True True
False False
【例子】比较的两个变量均指向可变类型。

a = [“hello”]
b = [“hello”]
print(a is b, a == b) # False True
print(a is not b, a != b) # True False
False True
True False

is, is not 对比的是两个变量的内存地址
==, != 对比的是两个变量的值

【例子】

print(-3 ** 2) # -9
print(3 ** -2) # 0.1111111111111111
print(1 << 3 + 2 & 7) # 0
print(-3 * 2 + 5 / -2 - 4) # -12.5
print(3 < 4 and 4 < 5) # True
-9
0.1111111111111111
0
-12.5
True
3. 变量和赋值

Python 变量名是大小写敏感的，foo != Foo。
【例子】

teacher = “老马的程序人生”
print(teacher) # 老马的程序人生

【例子】

first = 2
second = 3
third = first + second
print(third) # 5
5
【例子】

myTeacher = “老马的程序人生”
yourTeacher = “小马的程序人生”
ourTeacher = myTeacher + ‘,’ + yourTeacher
print(ourTeacher) # 老马的程序人生,小马的程序人生

4. 数据类型与转换

int 整型 <class ‘int’> -876, 10
float 浮点型<class ‘float’> 3.149, 11.11
bool 布尔型<class ‘bool’> True, False

【例子】通过 print() 可看出 a 的值，以及类 (class) 是int。

a = 1031
print(a, type(a))

# 1031 <class ‘int’>

1031 <class ‘int’>

Python 里面万物皆对象（object），整型也不例外，只要是对象，就有相应的属性 （attributes） 和方法（methods）。

【例子】

b = dir(int)
print(b)

# ‘numerator’, ‘real’, ‘to_bytes’]

[‘abs’, ‘add’, ‘and’, ‘bool’, ‘ceil’, ‘class’, ‘delattr’, ‘dir’, ‘divmod’, ‘doc’, ‘eq’, ‘float’, ‘floor’, ‘floordiv’, ‘format’, ‘ge’, ‘getattribute’, ‘getnewargs’, ‘gt’, ‘hash’, ‘index’, ‘init’, ‘init_subclass’, ‘int’, ‘invert’, ‘le’, ‘lshift’, ‘lt’, ‘mod’, ‘mul’, ‘ne’, ‘neg’, ‘new’, ‘or’, ‘pos’, ‘pow’, ‘radd’, ‘rand’, ‘rdivmod’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘rfloordiv’, ‘rlshift’, ‘rmod’, ‘rmul’, ‘ror’, ‘round’, ‘rpow’, ‘rrshift’, ‘rshift’, ‘rsub’, ‘rtruediv’, ‘rxor’, ‘setattr’, ‘sizeof’, ‘str’, ‘sub’, ‘subclasshook’, ‘truediv’, ‘trunc’, ‘xor’, ‘bit_length’, ‘conjugate’, ‘denominator’, ‘from_bytes’, ‘imag’, ‘numerator’, ‘real’, ‘to_bytes’]

【例子】找到一个整数的二进制表示，再返回其长度。

a = 1031
print(bin(a)) # 0b10000000111
print(a.bit_length()) # 11
0b10000000111
11

【例子】

print(1, type(1))

# 1 <class ‘int’>

print(1., type(1.))

# 1.0 <class ‘float’>

a = 0.00000023
b = 2.3e-7
print(a) # 2.3e-07
print(b) # 2.3e-07
1 <class ‘int’>
1.0 <class ‘float’>
2.3e-07
2.3e-07

import decimal
from decimal import Decimal
Python 里面有很多用途广泛的包 (package)，用什么你就引进 (import) 什么。包也是对象，也可以用上面提到的dir(decimal) 来看其属性和方法。

【例子】getcontext() 显示了 Decimal 对象的默认精度值是 28 位 (prec=28)。

a = decimal.getcontext()
print(a)

# traps=[InvalidOperation, DivisionByZero, Overflow])

Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
b = Decimal(1) / Decimal(3)
print(b)

# 0.3333333333333333333333333333

0.3333333333333333333333333333
【例子】使 1/3 保留 4 位，用 getcontext().prec 来调整精度。

decimal.getcontext().prec = 4
c = Decimal(1) / Decimal(3)

# 0.3333

0.3333

【例子】

print(True + True) # 2
print(True + False) # 1
print(True * False) # 0
2
1
0

【例子】bool 作用在基本类型变量：X 只要不是整型 0、浮点型 0.0，bool(X) 就是 True，其余就是 False。

print(type(0), bool(0), bool(1))

# <class ‘int’> False True

print(type(10.31), bool(0.00), bool(10.31))

# <class ‘float’> False True

print(type(True), bool(False), bool(True))

# <class ‘bool’> False True

<class ‘int’> False True
<class ‘float’> False True
<class ‘bool’> False True
【例子】bool 作用在容器类型变量：X 只要不是空的变量，bool(X) 就是 True，其余就是 False。

print(type(’’), bool(’’), bool(‘python’))

# <class ‘str’> False True

print(type(()), bool(()), bool((10,)))

# <class ‘tuple’> False True

print(type([]), bool([]), bool([1, 2]))

# <class ‘list’> False True

print(type({}), bool({}), bool({‘a’: 1, ‘b’: 2}))

# <class ‘dict’> False True

print(type(set()), bool(set()), bool({1, 2}))

# <class ‘set’> False True

<class ‘str’> False True
<class ‘tuple’> False True
<class ‘list’> False True
<class ‘dict’> False True
<class ‘set’> False True

【例子】

print(isinstance(1, int)) # True
print(isinstance(5.2, float)) # True
print(isinstance(True, bool)) # True
print(isinstance(‘5.2’, str)) # True
True
True
True
True

type() 不会认为子类是一种父类类型，不考虑继承关系。
isinstance() 会认为子类是一种父类类型，考虑继承关系。

【例子】

print(int(‘520’)) # 520
print(int(520.52)) # 520
print(float(‘520.52’)) # 520.52
print(float(520)) # 520.0
print(str(10 + 10)) # 20
print(str(10.1 + 5.2)) # 15.3
520
520
520.52
520.0
20
15.3
5. print() 函数
print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)

【例子】没有参数时，每次输出后都会换行。

shoplist = [‘apple’, ‘mango’, ‘carrot’, ‘banana’]
print(“This is printed without 'end’and ‘sep’.”)
for item in shoplist:
print(item)

# banana

This is printed without 'end’and ‘sep’.
apple
mango
carrot
banana
【例子】每次输出结束都用end设置的参数&结尾，并没有默认换行。

shoplist = [‘apple’, ‘mango’, ‘carrot’, ‘banana’]
print(“This is printed with ‘end=’&’’.”)
for item in shoplist:
print(item, end=’&’)
print(‘hello world’)

# apple&mango&carrot&banana&hello world

This is printed with ‘end=’&’’.
apple&mango&carrot&banana&hello world
【例子】item值与’another string’两个值之间用sep设置的参数&分割。由于end参数没有设置，因此默认是输出解释后换行，即end参数的默认值为\n。

shoplist = [‘apple’, ‘mango’, ‘carrot’, ‘banana’]
print(“This is printed with ‘sep=’&’’.”)
for item in shoplist:
print(item, ‘another string’, sep=’&’)

# banana&another string

This is printed with ‘sep=’&’’.
apple&another string
mango&another string
carrot&another string
banana&another string

1. 原码、反码和补码
二进制有三种不同的表示形式：原码、反码和补码，计算机内部使用补码来表示。

00 00 00 11 -> 3
10 00 00 11 -> -3

00 00 00 11 -> 3
11 11 11 00 -> -3

00 00 00 11 -> 3
11 11 11 01 -> -3

1. 按位运算
按位非操作 ~
~ 1 = 0
~ 0 = 1
~ 把num的补码中的 0 和 1 全部取反（0 变为 1，1 变为 0）有符号整数的符号位在 ~ 运算中同样会取反。

## 00 00 01 01 -> 5 ~

11 11 10 10 -> -6

00 00 01 00 -> 4

1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0

00 00 01 00 -> 4

1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0

00 00 01 11 -> 7

1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0

## 00 00 01 01 -> 5 ^ 00 00 01 10 -> 6

00 00 00 11 -> 3

A: 00 00 11 00
B: 00 00 01 11

A^B: 00 00 10 11
B^A: 00 00 10 11

A^A: 00 00 00 00
A^0: 00 00 11 00

ABA: = AAB = B = 00 00 01 11

num << i 将num的二进制表示向左移动i位所得的值。

## 00 00 10 11 -> 11 11 << 3

01 01 10 00 -> 88

num >> i 将num的二进制表示向右移动i位所得的值。

## 00 00 10 11 -> 11 11 >> 2

00 00 00 10 -> 2
3. 利用位运算实现快速计算

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

00 00 00 01 -> 1

## 00 00 11 10 -> 14 & 11 11 00 10 -> -14

00 00 00 10 -> 2
4. 利用位运算实现整数集合

a | (1<<i) -> 把 i 插入到集合中
a & ~(1<<i) -> 把 i 从集合中删除
a & (1<<i) -> 判断 i 是否属于该集合（零不属于，非零属于）

a 补 -> ~a
a 交 b -> a & b
a 并 b -> a | b
a 差 b -> a & (~b)

【例子】C#语言输出负数。

class Program
{
static void Main(string[] args)
{
string s1 = Convert.ToString(-3, 2);
Console.WriteLine(s1);
// 11111111111111111111111111111101

    string s2 = Convert.ToString(-3, 16);
Console.WriteLine(s2);
// fffffffd
}


}
【例子】 Python 的bin() 输出。

print(bin(3)) # 0b11
print(bin(-3)) # -0b11

print(bin(-3 & 0xffffffff))

# 0b11111111111111111111111111111101

print(bin(0xfffffffd))

# 0b11111111111111111111111111111101

print(0xfffffffd) # 4294967293
0b11
-0b11
0b11111111111111111111111111111101
0b11111111111111111111111111111101
4294967293

Python中bin一个负数（十进制表示），输出的是它的原码的二进制表示加上个负号，巨坑。
Python中的整型是补码形式存储的。
Python中整型是不限制长度的不会超范围溢出。

1. 注脚的解释 ↩︎

03-15
03-03
03-20
01-18
06-05
04-22