1、C++编程概述
面向对象编程语言把事物看成是具有属性和行为的对象,然后通过抽象找出属于同一类的事物的属性和行为,就形成了类。通过类得继承和多态可以很好的实现代码复用,提高软件开发效率。
结构化程序设计方法,它的设计思路是,自上而下,逐步细化,将程序结构按功能分成多个模块,每个模块可能又会分成多个模块,这样就形成了一个模块的树状结构,各个模块间的关系尽可能简单,功能上相对独立。每个模块都是由顺序、选择和循环三种基本结构组成。这种方法就将一个复杂的程序设计问题分成很多简单细化的子问题,更便于开发维护。但是这种方法的缺点是数据和处理数据的方法各自独立,如果数据结构改变,所有相关的方法都要改变。
面对对象设计方法,它将数据和方法放到一个整体里,这个整体就叫对象,同类型对象抽象成类,类中大部分数据只能用本类中的方法处理,类通过简单的外部接口与外界发生关系,而内部的各种关系对外部是透明的。
一、基本概念
- 对象
每个对象都是描述客观存在事物的一个实体,都是由数据和方法(也可以叫属性和行为)构成。属性是描述事物特征的数据,行为描述对对象属性的一些操作。 - 类
类是具有相同属性和行为的一些对象的集合,它为所有属于这个类的对象提供抽象的描述,比如麻雀和杜鹃都可以看作是对象,而鸟就可以看作类。 - 封装
封装就是把对象的所有属性和行为结合成一个独立的单位,对外隐藏对象的内部细节,只保留有几个接口与外界联系。 - 继承
一个类(叫做子类)可以通过继承另一个类(叫做父类)来拥有另一个类的所有属性和行为。比如车和汽车,汽车从车继承,车的所有属性和行为都继承到了汽车上。 - 多态性
多态性就是说父类中的属性和行为被子类继承后,子类可以有自己不同于父类的属性或行为。比如定义一个类“动物”,它具有“吃”这个行为,但是具体怎么吃吃什么,不知道,因为不知道到底是个什么“动物”,如果从这个类继承出子类“羊”和“老虎”,“吃”就成了具体的行为,怎么吃吃什么就都知道了。
二、数据的表示及运算
计算机中数据表示
计算机内部,数值、文字、声音、图形图像等各种信息都必须经过数字化编码后才能被传送、存储和处理。编码就是采用少量的基本符号,选用一定的组合原则,来表示大量复杂多样的信息,
进制间相互转化
- 十进制与二进制相互转化
将十进制转换魏二进制时,整数部分和小数部分分别转换,然后合并。十进制整数转换为二进制整数的方法是“除2取余”,先出低位最后得高位;十进制小数转换为二进制小数的方法是“乘2取整”,先得高位再得低位。
如: 175.7187 5 10 175.71875_{10} 175.7187510转换为二进制为 10101111.1011 1 2 10101111.10111_2 10101111.101112
在熟悉2的整数幂次情况下,可将十进制数写成按二进制数权的大小展开的多项式,按权值从高到低依次取各项的系数就可得到相应的二进制数。
175.7187 5 10 = 2 7 + 2 7 + 2 5 + 2 3 + 2 2 + 2 1 + 2 0 + 2 − 1 + 2 − 3 + 2 − 4 = 10101111.1011 1 2 175.71875_{10}=2^7+ 2^7+2^5+2^3+2^2+2^1+2^0+2^{-1}+2^{-3}+2^{-4}=10101111.10111_2 175.7187510=27+27+25+23+22+21+20+2−1+2−3+2−4=10101111.101112
二进制转换为十进制的方法:将二进制数的每一位数乘以它的权,然后相加,即可得到相对应的十进制。 - 八进制计数法与十进制、二进制计数法的相互转换
十进制转八进制:对于十进制整数部分采用“除8取余”的方法转换为八进制整数;对于十进制小数则采用“乘8取整”的方法转换为八进制小数。
二进制数据转换成八进制数的方法是:从小数点起,每三位二进制位分成一组(不足3位时,在小数点左边时左边补0,在小数点右边时右边补0),然后写出每一组的等值八进制数。顺序排列起来就得到所要求的八进制数。
八进制转二进制:将一位8进制用三位二进制数表示,就可以直接将八进制数转换成二进制。
- 十六进制计数法与十进制、二进制计数法的相互转换
十进制转十六进制:十进制数的整数部分“除16取余”,十进制数的小数部分“乘16取整”。
二进制转十六进制:4位二进制对应1位16进制。
10101111.1011 1 2 = A F . B 8 16 10101111.10111_2=AF.B8_{16} 10101111.101112=AF.B816
二进制计算规则
- 加法:二进制加法的进位规则是“逢二进一”
- 减法:二进制减法的借位规则是“借一当二”
- 乘法
0 × 0 = 0 0\times0=0 0×0=0 1 × 0 = 0 1\times0=0 1×0=0 0 × 1 = 0 0\times1=0 0×1=0 1 × 1 = 1 1\times1=1 1×1=1
三、计算机数据的存储单位
- 位
这是数据的最小单位,表示一位二进制数据。 - 字节
由八位二进制数据组成。字节是数据存储中最常用的基本单位。我们常说内存有2G,这里的单位就是字节。1K等于1024字节,1M等于1024K,1G等于1024M。 - 字
位的组合,作为一个独立的信息单位处理。取决于机器的类型、字长及使用者的要求。常用的固定字长有8位、16位、32位等。 - 机器字长
讨论信息单位时,有个与机器硬件指标有关的单位就是机器字长,一般指参加运算的寄存器所含有的二进制数的位数,它代表了机器的精度,如32位、64位等。就是我们常说的32位机器还是64位机器。
四、机器数和码制
对于带符号数,机器数的最高位是表示正、负的符号位,其余则表示数值。若约定小数点的位置在机器数的最低数值位之后,则是纯整数;若小数点的位置在机器数的最高数值位之前(符号位之后),则是纯小数。无符号数是指全部二进制位均代表数值,没有符号位。
带符号的机器数可以采用原码、反码和补码、移码等不同得编码方式。
- 原码表示
数值X得原码记为 [ X ] 原 [X]_原 [X]原如果机器字长为n,则最高位是符号位,0表示正好,1表示负号,其余的n-1位表示数值的绝对值。数值零的原码表示有两种形式: [ + 0 ] 原 = 00000000 , [ − 0 ] 原 = 10000000 [+0]_原=00000000,[-0]_原=10000000 [+0]原=00000000,[−0]原=10000000 - 反码表示
数值X的反码记为 [ X ] 反 [X]_反 [X]反如果机器字长为n,则最高位是符号位,0表示正好,1表示负号,其余的n-1位表示数值。
正数的反码与原码相同,负数的反码则是其绝对值按位求反。
数值零的反码表示有两种形式: [ + 0 ] 反 = 00000000 , [ − 0 ] 反 = 11111111 [+0]_反=00000000,[-0]_反=11111111 [+0]反=00000000,[−0]反=11111111 - 补码表示
数值X的补码记为 [ X ] 补 [X]_补 [X]补如果机器字长为n,则最高位是符号位,0表示正好,1表示负号,其余的n-1位表示数值。
正数的补码与其反码和原码相同,负数的补码则等于其反码的末尾加1。
在补码表示中,0有唯一的编码: [ + 0 ] 补 = 00000000 , [ − 0 ] 补 = 00000000 [+0]_补=00000000,[-0]_补=00000000 [+0]补=00000000,[−0]补=00000000
相对于原码和反码表示,n位补码表示法有一个例外,当符号位为1而数值位全部为0时,它表示整数 2 n − 1 2^{n-1} 2n−1,即此时符号位的1即表示负数又表示数值。 - 移码表示
移码表示法是在数X上增加一个偏移量来定义的,常用于表示浮点数中的阶码。是基于补码来进行计算。
如果机器字长为n,在偏移量为2^(n-1)时,只要将补码的符号位取反即可获得相应的移码表示。
五、机器数运算
机器数的加减运算
在计算机中,可以只设置加法器,而将减法器运算转换为加法运算来实现。
- 原码加减法
先确定符号位,符号位相同则加数值为进行运算;符号位不同则比较数值位绝对值,取绝对值大的符号位,然后用绝对值大的减去绝对值小的。
在计算机中很少使用原码计算。 - 补码加减法
补码加法: [ X + Y ] 补 = [ X ] 补 + [ Y ] 补 [X+Y]_补=[X]_补+[Y]_补 [X+Y]补=[X]补+[Y]补
补码的减法:差的补码等于被减数的补码加上减数取负后的补码,即: [ X − Y ] 补 = [ X ] 补 + [ − Y ] 补 [X-Y]_补=[X]_补+[-Y]_补 [X−Y]补=[X]补+[−Y]补
由[X]_补求[-X]_补的方法是:[X]_补的各位取反(包括符号位),末尾加1。
补码加减运算的规则如下:
- 参加运算的操作数用补码表示。
- 符号位参加运算。
- 若进行相加运算,则两个数的补码直接相加;若进行相减运算,则将减数连同其符号位一起变反后加1后于被减数相加。
- 运算结果用补码表示。
机器数的乘除运算
- 纯软件方案。
- 在现有的能够完成加减运算的算数逻辑单元ALU的基础上,通过增加少量的实现左、右移动的逻辑电路,来实现乘除运算。
- 设置专门的硬件阵列乘法器(或除法器),完成乘(除)法运算。
原文地址:https://blog.csdn.net/qingttqing/article/details/139286662
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!