认识计算机
程序:指挥计算机工作的指令序列。
计算机如何处理程序?
按照冯·诺依曼存储程序的原理,计算机的工作流程大致如下:
1. 用户打开程序,程序开始执行;
2. 操作系统将程序内容和相关数据送入计算机的内存;
3. CPU根据程序内容从内存中读取指令;
4. CPU分析、处理指令,并为取下一条指令做准备;
5. 取下一条指令并分析、处理,如此重复操作,直至执行完程序中全部指令,最后将计算的结果放入指令指定的存储器地址中。
计算机语言三代
机器语言——计算机最早的语言形式,直接使用二进制代码表示,由0和1组成的序列构成,计算机能够直接识别和执行这些指令。
优点:计算机直接识别并处理,运行速度最快。
缺点:非常底层且难以理解和记忆。
汇编语言——使用助记符来表示机器指令,这些助记符更接近人类语言,使得编程变得更加直观和易于理解。
优点:一定程度上解决了机器语言的缺点。
缺点:低级语言编写效率低,依赖于硬件。
高级语言是——使用人类日常语言编写。
优点:易于理解与阅读,不依赖于硬件可以执行高,开发效率高。
缺点:执行速度最慢,占用空间多。
高级语言分类
按实现方式:分为编译型语言和解释型语言。
编译型语言如C、C++,需要先将源代码编译成机器码再执行,开发效率低,执行效率高。
解释型语言如Python、JavaScript,则在运行时由解释器逐行解释执行,开发效率高,执行效率低。
按编程方式:可以分为面向对象语言、面向过程(函数式)语言等。
面向对象语言如Java、C++,支持封装、继承和多态等概念;
面向过程(函数式)语言如C,以函数为主要构成单元,强调无副作用和不可变性。
一、进制
1.1、什么是进制
人在日常生活中使用十个手指进行计数【十进制】,比较方便;计算机为了方便,使用二进制来进行计数,因为二进制只有0和1,,计算方便,逻辑电路易于实现。
进制:人为规定的符合某种规则的计数方式。
X进制的规则是:逢X进一,借一当X
生活中有哪些进制?十进制、十二进制、七进制、六十进制
计算机中有哪些进制?二进制、八进制、十六进制
1.2、进制的三要素
进制 | 数码 | 基数 | 位权 |
二进制 | 0 ,1 | 2 | ……2^2,2^1,2^0,2^-1,2^-2…… |
八进制 | 0,1,2,3,4,5,6,7 | 8 | ……8^2,8^1,8^0,8^-1,8^-2…… |
十进制 | 0,1,2,3,4,5,6,7,8,9 | 10 | ……10^2 10^1 10^0 10^-1 10^-2…… |
十六进制 | 0~9,a~f | 16 | ……16^2 16^1 16^0 16^-1 16^-2…… |
1.3、进制表示方式
进制分为前缀法和后缀法
进制 | 前缀法 | 后缀法 |
二进制 | 0b1234[错误] 0b1001 | 1001B |
八进制 | 0o1234 0O234 0678[错误] | 1234O (这个是字母“O”不是数字0) |
十进制 | 1234 | 1234D |
十六进制 | 0x1234 0X1234 | 1234H 12BDH |
1.4、进制转换
1.4.1 十进制转N进制
方法1:除N取余、逆向排列
方法2:位权展开相减法
1.4.2 N进制转十进制
方法:位权展开相加
1.4.3 二进制与八进制转换
二进制转八进制:三合一
八进制转二进制:一拆三
eg:
0b 011 011 011 = 666
0565 = 000 010 011 010
1.4.4、二进制与十六进制进行转换
二进制转十六进制:四合一
十六进制转二进制:一拆四
eg:
0b 0011 1000 0010 1111 = 0X 382F
0x abc =1010 1011 1100
二、数据存储
计算机的简易工作流程:通过输入设备输入数据到计算机,CPU接收指令对数据进行处理,在这个过程中产生的临时数据或过程缓存到内存,最后将结果通过输出设备进行显示
数据:能被计算机识别并处理的符号集合。
数据类型:1,3.14159……,-12
非数值型数据:a,http, 图片 音频 视频…
以单字符为例:
Ascll码
数据型数据再分类:
有符号数:区分正负
无符号数:不区分正负 添加关键字unsigned去区分
2.1、有符号数【0,1】
以八位二进制为例,看一下有符号数的最大值和最小值:
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
正0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
负1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
最大值+127,最小值-127,但是因为0不区分正负,所以用-128来表示-0,那么
取值范围就是[ - 128,+127]
2.2 无符号数
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
不分正负,取值范围是【0,255】
2.3 有符号数的表示方式
计算机在参与运算的时候,都是补码的形式进行的。
注意:正数的原反补码都一样,我们需要考虑的是负数的原码反码补码。
2.3.1 原码
最高位代表符号位,其他位是直接转换而来
2.3.2 反码
最高位代表符号位,其他位对原码按位取反【0变1 1变0】
2.3.3 补码
最高位代表符号位,其他位对反码加1
eg:6-8
6: 原码 反码 补码 0000 0110
-8:
源码:1000 1000
反码:1111 0111
补码:1111 1000
6-8补码运算:
0000 0110
1111 1000
补码:1111 1110
反码:1111 1101
源码:1000 0010 = -2
存储时看数据(正负) 取出时看类型(有无符号)
三、数据类型
3.1 数据类型的作用
基本作用:不同的数据类型占用不同的内存空间,这有助于优化程序的性能和资源利用。
具体作用:再学习
3.2 数据类型的分类
3.3 基本数据类型
内存单位:
最小单位bit 位
基本单位byte 字节
1字节 = 8位二进制 1字节 = 1111 0000
数据存储到内存,是以字节为单位的
还有哪些单位:
1KB = 1024B = 2^10B
1MB = 1024KB
1GB = 1024MB
1TB = 1B
3.3.1数值型 Number
- int 整数 正整数、负整数、0【区别:可以处理极大极小数】
- float 小数、浮点数、实数 因为小数点可以移动,所以称之为浮点数
- complex 复数 由实部和虚部两部分组成 3j 3+4j
- bool 布尔值 只有两个值True 和 False【注意:首字母必须大写】
int_a = 13
print(type(int_a))
float_a = 13.14
print(type(float_a))
complex_a = 3 + 4j
print(type(complex_a))
bool_a = True
print(type(bool_a))
3.3.2 字符串 string
字符串就是一系列文本,使用单引号或者双引号括起来,同时可以使用 \ 进行转义字符的处理。
注意:
单引号和双引号只是字符串的标志,不是内容。
例如:"hello",这里面包含5个字符 h e l l o。
若想把单引号 双引号当作内容,如何处理呢?
使用转义字符,因为解释器、浏览器、编译器有时候不解析某些特殊符号,我们就需要使用 \ 对这些特殊符号进行转义说明。
\' | 单引号 |
\" | 双引号 |
\t | tab制表符位 |
\n | 回车符 |
\a \b \r \\等等 |
s = "I'm ok"
print(s)
# s = 'I'm ok'
# s = " you are "ok" "
双引号中可以包含单引号
单引号中可以包含双引号
单引号中不能包含单引号
双引号中不能包含双引号
s = 'I\'m ok'
print(s)
s = "you are \"ok\""
print(s)
print("\t缩进点\n换一行下来")
3.3.3 列表 list
一组数据放在 [] 里面,元素之间使用逗号隔开
list_a = [1,2,3,4,5]
print(type(list_a))
print(list_a)
3.3.4 元组 tuple
一组数据放在 () 里面,元素之间使用逗号隔开
tuple_a = (1,2,3,4,5)
print(type(tuple_a))
print(tuple_a)
3.3.5 字典 dict
是一种映射类型,可以进行索引查看,由键值对组成
放在{}里面,键值对用:相连,多个键值对用逗号分割
dict_a = {'人字旁':('们', '亿'), '双人旁':('徐', '行')}
print(type(dict_a))
print(dict_a)
3.3.6 集合 set
一组数据放在 {} 里面,元素之间使用逗号隔开
set_a = {1, 2, 3, 4, 5}
print(type(set_a))
print(set_a)
四、变量
python中的变量,不需要声明数据类型,根据所赋的值确定类型
变量:在程序运行过程中可以修改的量
变量定义的语法格式:变量名 = 赋值/数据
变量的数据类型:数值Number 字符串String 列表List 元组Tuple 集合Set 字典Dict
变量三要素:
id | 内存地址 |
value | 值 |
type | 类型 |
a = 1
print(id(a))
print(a)
print(type(a))
"""
140720442894776
1
<class 'int'>
"""
4.1 标识符
用于给变量、函数、对象、等命名的符号
命名规范:
1 由字母,数字,下划线组成,严格区分大小写
2 不能以数字开头
3 不能包含关键字
4 建议使用驼峰命名法、连字符法,见名识意
驼峰命名法:MyFunName
连字符法:my_name
4.2 关键字
python中预先保留的一些具有特殊含义的单词,不能作为标识符。
关键字有这些特征:
预定义:python内置,无需外部导入
不可变:不可以重新定义或者修改
# 使用关键字import导入外部的keyword关键字库
import keyword
# 调用kwlist显示所有的关键字
print(keyword.kwlist)
"""
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await',
'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except',
'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda',
'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
"""
print(len(keyword.kwlist))#35 一共有35个关键字
#调用iskeyword判断你的设置的标识符是不是关键字
print(keyword.iskelist("for")) #true
五、运算符
5.1基本运算符
算术运算符 | 加 + 减 - 乘 * 除 / 商 // 余(模运算) % 乘方 ** | 混合运算时,遵循优先级 ** 高于 * / // % 高于 + - 若记不住,直接加() |
比较运算符 | 大于> 小于 等于 == 大于等于 >= 小于等于 不等于 != | 比较运算符的比较结果是布尔值,两个值 True 和 False |
逻辑运算符 | 逻辑与 and 逻辑或 or 逻辑非 not | 逻辑与:全真为真、遇假则假 逻辑或:全假为假、有真即真 逻辑非:非真即假、非假即真 逻辑运算的结果是布尔值,有两个:True 和 False |
位运算符(二进制)
位与 & | 1&0=0 0&1=0 0&0=0 1&1=1 全1为1 有0则0 |
位或 | | 1|0=1 0|1=1 0|0=0 1|1=1 有1则1 全0则0 |
异或 ^ | 1^0=1 0^1=1 1^1=0 0^0=0 异或 相同为0 不同为1 |
取反 ~ | ~1=0 ~0=1 |
左移 << | 110110<<2 = 0110 00 |
右移 >> | 110110>>2 = 00 1101 |
位运算符:先换算成二进制,以【补码】形式参与运算
print(25 & 13)
print(3 & -3)
print(3 | -3)
print(~(-3))
print(3 ^ -3)
print(3 << 1)
print(3 >> 1)
print(-3 << 2)
print(-3 >> 2)
注意:
对于左移来说,低位补0
对于右移来说,正数高位补0,负数高位补1
问:
1. 0x10 | 0x01 = ? 十六进制的结果是多少?
2. 0x10 & 0x01 = ? 十六进制的结果是多少?
3. 12 & 0o12 的十进制结果是:( )
5.2 运算符的优先级
() | 圆括号内的表达式拥有最高优先级 |
** | 乘方运算 |
*、/、%、// | 算术运算符,先乘除 |
+、- | 算数运算符,后加减 |
> | 位运算符的左移与右移 |
& | 位运算符的按位与 |
^ | 位运算符的按位异或 |
| | 位运算符的按位或 |
> 、=、 | 比较运算符 |
and、or | 逻辑运算符 |
=、+=等 | 赋值运算符优先级最低 |