# 编程基础
### 编程语言
我们也可以通过”语言“来控制计算机,让计算机为我们做事情,这样的语言就叫做编程语言(Programming Language)。
编程语言有很多种,常用的有C语言、C++、Java、C#、Python、PHP、JavaScript、Go语言、Objective-C、Swift、汇编语言等
这些具有特定含义的词汇、语句,按照特定的格式组织在一起,就构成了源代码(Source Code),也称源码或代码(Code)。
机器语言是电脑的CPU可直接解读的数据。机器码有时也被称为原生码(NativeCode),汇编语言指令地址寄存器,用助记符(Mnemonics)代替机器指令的操作码,高级语言相对于机器语言,是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据)而言。是高度封装了的编程语言。
程序是在内存中运行的,所谓内存,就是我们常说的内存条。
### C与C ++
C是面向过程,
C++ 主要是在C语言的基础上增加了面向对象和泛型的机制,提高了开发效率,以适用于大中型软件的编写。C,C++ 代码都是通过同一个编译器来编译,很难说C++是一门独立的语言还是对C的扩展。
### 进制的转换
#### 将十进制转换为二进制、八进制、十六进制
整数部分:除 N 取余,逆序排列
小数部分:乘 N 取整,顺序排列
#### 将二进制、八进制、十六进制转换为十进制
二进制、八进制和十六进制向十进制转换都非常容易,就是“按权相加”。所谓“权”,也即“位权”。
假设当前数字是 N 进制,那么:
对于整数部分,从右往左看,第 i 位的位权等于Ni-1
对于小数部分,恰好相反,要从左往右看,第 j 位的位权为N-j。
### 单位换算
1Byte = 8 Bit
1KB = 1024Byte = 2**10Byte
1MB = 1024KB = 2**20Byte
1GB = 1024MB = 2**30Byte
1TB = 1024GB = 2**40Byte
1PB = 1024TB = 2**50Byte
1EB = 1024PB = 2**60Byte
在内存中没有abc这样的字符,也没有gif、jpg这样的图片,只有0和1两个数字,计算机也只认识0和1。所以,计算机使用二进制,而不是我们熟悉的十进制,写入内存中的数据,都会被转换成0和1的组合。
### 软件的运行
对于读写速度,内存 > 固态硬盘 > 机械硬盘。机械硬盘是靠电机带动盘片转动来读写数据的,而内存条通过电路来读写数据,电机的转速肯定没有电的传输速度(几乎是光速)快。虽然固态硬盘也是通过电路来读写数据,但是因为与内存的控制方式不一样,速度也不及内存。
双击图标,操作系统就会知道你要运行这个软件,它会在硬盘中找到你安装的软件,将数据(安装的软件本质上就是很多数据的集合)复制到内存。CPU直接与内存打交道,它会读取内存中的数据进行处理,并将结果保存到内存。如果需要保存到硬盘,才会将内存中的数据复制到硬盘。
例如,打开Word文档,输入一些文字,虽然我们看到的不一样了,但是硬盘中的文档没有改变,新增的文字暂时保存到了内存,Ctrl+S才会保存到硬盘。因为内存断电后会丢失数据,所以如果你编辑完Word文档忘记保存就关机了,那么你将永远无法找回这些内容。
### 虚拟内存
操作系统(Operating System,简称 OS)为我们解决了这个问题:当程序运行需要的空间大于内存容量时,会将内存中暂时不用的数据再写回硬盘;需要这些数据时再从硬盘中读取,并将另外一部分不用的数据写入硬盘。这样,硬盘中就会有一部分空间用来存放内存中暂时不用的数据。这一部分空间就叫做虚拟内存(Virtual Memory)。
硬盘与内存进行读取、写入的交互,内存与CPU进行读取、写入的交互。
ASCII——编码专门针对英文的字符集
ASCII 是“American Standard Code for Information Interchange”的缩写,翻译过来是“美国信息交换标准代码”。看这个名字就知道,这套编码是美国人给自己设计的。C语言有时候使用 ASCII 编码,有时候却不是
标准 ASCII 编码共收录了 128 个字符,其中包含了 33 个控制字符(具有某些特殊功能但是无法显示的字符)和 95 个可显示字符。
被称为统一码,万国码的Unicode于1994年正式公布第一个版本,现在容纳100多万个符号Unicode是一套字符集
(字符集与字符码?)
Unicode有三种编码
UTF(Unicode transformation format Unicode 转换格式)
UTF-8 一种变长的编码方案,使用1-6个字节来存储
UTF-32 一种固定长度的编码方案,不管字符编号大小,始终以四个字节来存储
UTF-16 介于utf-8 utf-32之间,使用2/4来存储
以上三种,只有UTF8兼容ASCII
网友评论