记录重学C&C++(从面向过程到面向对象的过程)
C:
介绍:
是一种高级语言,在此基础上发展出C++和C#。用C语言编程的操作步骤:
第一章C语言概述:
1.1数制及相互转换:
每一种数制就是一种数字系统。
数字系统的由来:
随着记录数字不断变大,远古时代的结绳计数,在石板上画线等方式不在适用,随即慢慢发明出了非位置化数字系统【同样的数字在不同位置上的含义相同,由不同位置上的数字相加减而成】(罗马数字) 和 位置化数字系统【同样的数字在不同位置上的含义不同】(二进制|八进制|十进制|十六进制)
对于人类来说,十进制最为方便。
对于计算机来说,0,1表示电流的关开,二进制最为方便。
由此需要进制转换,将对于人类理解方便的内容变为计算机易懂的语言。
转换方法(通法):
把一个 k 进制的数转换成 r 进制(k≠10,r≠10),一般是以十进制数作为中间过渡。即先把k进制数转换成十进制,再把十进制数转换成 r 进制数。
step1. k 进制数转换成 十进制数:
step2.将十进制数转换为 r 进制数:
整数部分:短除法(又叫除 r 取余,逆序取余):把十进制数连续除以 r ,知道商为0为止,记录每次的商和余数,没有余数则记余数为0。已记录余数相反次序依次写出各个余数,就是对应的二进制数。
小数部分:乘 r 取整 ,顺序取整:纯小数部分连续乘 r 。每次把当前纯小数乘以 r ,整数部分(十进制)换算成对应的 r 进制数(短除法),分别记载整数部分的个位和纯小数部分,。如果当前纯小数部分是0则计算完成,按得到的整数部分的原有次序写出各个 r 进制数即可。但是如果纯小数部分一直不是0,则指定小数点后取n位,即做了n次乘法计算后终止。
特殊情况:二进制和十六进制,二进制和八进制之间的转换(不需要做两次)
以二进制转换为十六进制为例:
(1)把二进制数从小数点起分别向左对整数部分和向右对小数部分每4位分成一组,最左边一组不足4位左补零,最右边一组不足4位右补零。
(2)把每组4位的二进制数转换成1位十六进制数
(3)从左到右依次写出结果,小数点保留原位,把多余的0删去
eg1.把二进制11011010101011.110111转换成十六进制
解:
- 分组,左右两组不足则补齐4位: 0011|0110|1010|1011.1101|1100
- 转换 : 3 6 A B . D C
- 整理结果 36AB.DC
eg2.把十六进制36D.7A转换成二进制
解:
- 一个一个分组:3 | 6 | D . 7 | A
- 转换: 0011 | 0110 | 1101.0111 | 1010
- 整理结果: 1101101101.0111101
二进制与八进制之间的转换类似只不过,是“3位一组”。
1.2 数的书写方法
-
下标法:
在写完表示数值的数符序列之后,在右下角以角标的形式写上所使用的数制的基数。
例如:10012 表示这是一个二进制数 -
前导法:(C语言采用此方法)
在数符序列的前面加上特定的符号以区分不同的数制。
十六进制的前导符号是: 0x (x不区分大小写)
八进制的前导符号是:0
十进制数没有前导符号
例如:十六进制数123在C语言中写成:0x123 ; 八进制数123在C语言中写成:0123 -
后缀法:
在数符序列的面后加上特定的符号以区分不同的数制。
1.3数据存储
内存、外存和CPU中的寄存器都可以存储数据,但是在程序执行过程中,通常CPU只直接处理寄存器和内存中的数据,外存中的数据先调入内存在进行处理。
CPU中有单字节处理器、双字节处理器、4字节处理器,可以存放不同类型的数据。内存则以字节为基本存储单位,存储一个字符只需要一个字节,但存储复杂数据时一个显然是不够的,这就需要把多个连续的内存字节组合在一起使用。
存储元和位是计算机科学中两个重要的概念,它们在数据存储和处理方面扮演着不同的角色。为了让你更容易理解这两个概念,我将从定义、功能和应用等方面进行详细解释。
1.3.1 定义
位(Bit):
位是“二进制位”的缩写,是计算机中最基本的信息单位。它可以表示两种状态,通常用0和1来表示。例如,位可以用来表示开关的状态:0表示关闭,1表示打开。
存储元(Storage Element):
存储元是指能够存储一个或多个位的基本单元。它可以是一个简单的电路,能够保持位的状态,或者是更复杂的结构,如寄存器、内存单元等。存储元的设计可以使其在需要时读取或写入数据。
2. 功能
位的功能:
位是信息的最小单位,所有的数据(无论是数字、字符还是图像)最终都可以被转换为位的组合。计算机通过处理位来执行各种操作,比如算术运算、逻辑运算等。
存储元的功能:
存储元的主要功能是保存位的信息。它们可以在计算机的内存中存储数据,并在需要时提供这些数据。存储元的设计决定了数据的存取速度和存储容量。例如,RAM(随机存取存储器)中的存储元可以快速读写,而硬盘中的存储元则用于长期保存数据。
3. 应用
位的应用:
位在计算机的各个方面都有应用。比如,在网络通信中,数据通过位的传输进行交换;在图像处理中,图像的每个像素可以用多个位来表示其颜色信息。
存储元的应用:
存储元广泛应用于计算机的内存和存储设备中。比如,RAM中的存储元用于临时存储正在处理的数据,而硬盘中的存储元则用于长期存储文件和程序。现代计算机中,存储元的设计和效率直接影响到计算机的性能。
4. 总结
简单来说,位是信息的基本单位,而存储元是能够存储这些位的结构。位是构成数据的基础,而存储元则是实现数据存储和访问的工具。在计算机中,通常一个存储元可以存储一个位。
1个位存储的信息量实在太小,于是把8个位联合在一起使用,称为一个字节。
换算关系:
CPU对所有字节进行编号,从0编起,按自然数顺序逐个编排。每一个内存字节在计算机中都有唯一的编号,这个编号就是内存地址。
1.3.2存储字符
字符是指人们日常生活中使用的各种符号(包括0~9数字符号,大小写各26个英文字母,加减乘除号等),程序设计语言并不直接处理这些形状,而是处理他们的代码。
计算机可以根据ASCII表进行字符形状和代码之间的相互转换机制。
标准的ASCII码一共编排了128个符号。
1.3.3存储整数
一个字节存储器存放整数时,共有28=256种不同的组合。如果把一个字节的各个位全部用于表示二进制数,则可以存放0~255的整数;如果用最高位表示数的正负情况,其余位表示数值,则可存放 -128~+127的整数,这种表示整数的方式成为补码。
觉得单字节存储器太小,不足以存放数据时,可以考虑把几个字节联合起来当作一个整体。现在的计算机一般都支持把2字节、4字节或者8字节甚至16字节联合使用:
- 通常都是把2的i次方个联合使用(例如:用一个字节存储器存放整数时,共有28=256种同的组合)
- 这些字节的地址是连续的,以最小地址作为联合使用的整体的地址。(联合时把地址大的字节叫做高位,地址小的字节叫做低位)
- 4字节以上的联合使用往往要求其最小地址是4的整数倍,一些高档计算机针对8字节以上的联合使用要求最小地址是8的整数倍。
- 这样的联合使用由编译软件帮助处理,程序员只需要了解写出的命令是在使用几字节存储器就行了。
补码:是计算机中表示整数的最常用的方法,该方法用最左的一个二进制位表示数的正负,其余位表示数值。
如何求补码?
- 存储数据时首先要确定存储单元的大小,即字节数或者二进制位数。对于一个存储单元的各个二进制位,以最右边的一位为第0位,依次向左编号。1字节存储单元的最左边一位(最高位)是第7位,以此类推。
- 正整数的补码:
2.1 最高位为0;
2.2 其余各位就是该整数对应的二进制形式,位数不足时左补0。 - 整数0的补码:存储单元的所有二进制位全为0。
- 负数的补码:
4.1 先按负数的绝对值转换成对应的二进制形式;
4.2 以左补0的方式凑齐单元的位数;
4.3 对所有的二进制位取反
4.4 把4.3步得到的二进制数加1(二进制的加法:逢二进一)
如何知道一个N位补码表示的整数,其对应的十进制数是多少?
- 如果最左一位是0,则该它表示的是一个非负整数,直接把这N位当作一个二进制整数,转换成十进制即可。否则执行(2);
- 把所有的N位取反,再把这N位当作一个二进制数,按二进制加法规则加1,把得到的N位当作一个二进制整数转换成十进制,最后在该十进制前面添加负号“-”。
1.3.4存储实数
采用IEEE754标准
IEEE754的介绍,转载至这篇文章