第 1 章 C++绪论
本章将带领大家踏入 C++ 语言编程的旅程,学习其基本概念和语法。C++ 是一门功能强大且灵活的编程语言,广泛应用于各种领域,包括系统软件开发、游戏开发、数据科学等等。
我们将从 C++ 语言的发展历史和特点入手,逐步介绍变量、数据类型、运算符、表达式、控制语句、函数等基础概念,并结合实际例子进行讲解,帮助大家理解和掌握这些知识。

by 敏 吴

目录
计算机程序设计语言的发展
计算机程序设计语言的发展经历了从机器语言到高级语言的漫长过程。 了解不同阶段的语言特点有助于理解编程的本质。
面向对象的方法
面向对象方法是一种重要的编程范式,它将现实世界中的事物抽象为对象。 学习面向对象方法能够提高软件开发效率,构建更加复杂的应用程序。
面向对象的软件开发
面向对象的软件开发强调以对象为中心,使用类、封装、继承和多态性等概念。 这种方法可以提高软件的可维护性和可复用性。
信息的表示与存储
理解信息在计算机中的表示和存储方式是学习编程的基础。 本课程将介绍常见的数制、编码方式以及存储单位。
计算机程序
程序定义
计算机程序是指令的集合,这些指令告诉计算机如何完成特定任务。程序就像一份说明书,指示计算机一步一步地执行操作。计算机的工作完全由程序控制。程序是计算机的灵魂,没有程序,计算机就无法发挥任何作用。
指令
指令是计算机可以识别的命令,它告诉计算机执行特定的操作。例如,指令可以指示计算机将两个数字相加,将数据从一个位置移动到另一个位置,或者显示信息到屏幕上。指令是程序的基本单位,每个程序都由一系列指令组成。
机器语言与汇编语言
机器语言
机器语言由计算机硬件系统可以识别的二进制指令组成。这是最底层的编程语言,直接与计算机硬件交互。机器语言的指令通常由一系列 0 和 1 组成,对人类来说难以理解和编写。
汇编语言
汇编语言使用助记符来表示机器指令,例如 ADD 代表加法,SUB 代表减法。它比机器语言更易读,但仍然与硬件密切相关。程序员需要了解计算机的内部结构和工作原理才能使用汇编语言。
早期编程
在计算机发展的初期,软件工程师只能使用机器语言来编写程序。这对于程序员来说是一个巨大的挑战,因为他们需要手动编写大量复杂的二进制代码。
高级语言
抽象层次
高级语言屏蔽了机器的细节,简化了程序编写过程,提高了语言的抽象层次。程序员可以更专注于问题本身的解决,而无需过多考虑硬件细节。例如,C++语言中的数据类型和运算符提供了抽象,方便程序员操作数据和进行计算。
易于理解
高级语言使用接近自然语言的语法和语义,使得程序更容易理解和编写。程序中的语句通常具有明确的含义,便于程序员阅读和维护代码。例如,C++中的变量命名和控制流语句,使得代码更容易理解和维护。
可移植性
高级语言通常具有良好的可移植性,这意味着程序可以在不同的计算机平台上运行,而无需进行大量的修改。这使得程序员可以专注于编写代码,而无需担心平台兼容性问题。例如,C++是一种跨平台语言,可以在Windows、Linux、macOS等平台上运行。
面向对象的语言

1

1. 出发点
面向对象的语言旨在更直接地描述客观世界中存在的事物(对象)以及它们之间的关系。这种语言设计思想试图模拟人类的思维方式,使程序更易理解和维护。

2

2. 特点
面向对象语言是一种高级语言,它将客观事物看作具有属性和行为的对象。通过抽象找出同一类对象的共同属性和行为,形成类。通过类的继承与多态实现代码重用,提高开发效率。

3

3. 优点
面向对象语言的优点在于它使程序能够比较直接地反映问题域的本来面目,软件开发人员能够利用人类认识事物所采用的一般思维方法来进行软件开发,降低开发难度,提高软件质量。
最早的程序

1

1. 目的
最早的程序主要是为了进行数学计算而设计的。它们通常用于解决特定的数学问题,例如计算方程式、求解积分等等。

2

2. 主要工作
早期程序员的主要工作是设计求解问题的过程,也就是编写程序的算法。这个过程需要将问题分解成一系列步骤,然后用代码实现这些步骤。

3

3. 缺点
对于庞大、复杂的程序来说,早期程序难以开发和维护。因为早期程序通常缺乏结构化和模块化的设计,导致代码难以理解和修改。
面向过程的结构化程序设计方法
自顶向下、逐步求精
结构化程序设计方法采用自顶向下、逐步求精的思路。将一个复杂的程序设计任务分解成多个相对独立的子任务,每个子任务都可以进一步细化成更小的子任务,直到可以轻松实现为止。
模块分解与功能抽象
该方法利用模块分解与功能抽象,将程序划分为若干个功能相对独立的模块。模块之间通过接口进行通信,每个模块负责完成特定功能,并隐藏内部实现细节。
面向过程的结构化程序设计方法(续)
可重用性差
面向过程的程序设计方法可重用性差,因为每个模块都是独立的,难以在其他程序中直接使用。代码的重复编写增加了维护和调试的难度,降低了开发效率。
数据安全性差
数据和处理数据的过程分离,数据缺乏保护,容易被恶意访问和修改。这种设计模式难以满足现代软件对数据安全的要求,无法有效地保护敏感信息。
难以开发大型软件
随着软件规模的扩大,面向过程的程序设计方法变得越来越难以维护和管理。复杂的功能和庞大的代码量会使代码难以理解和修改,不利于团队合作和软件的持续迭代开发。
面向对象的方法
面向对象方法的由来
面向对象方法起源于对传统面向过程程序设计方法的反思。传统的结构化程序设计方法存在着一些不足,例如代码复用率低、维护困难等。为了克服这些缺点,面向对象方法应运而生。
面向对象方法强调将数据和对数据的操作封装在一起,形成独立的对象。对象之间通过消息进行通信,提高了程序的可维护性和可扩展性。
面向对象方法的特点
  • 封装性
  • 继承性
  • 多态性
面向对象方法的核心思想是抽象、封装、继承和多态。这些特点使得程序更加灵活、可扩展、可维护。
面向对象的基本概念——对象
一般意义上的对象
现实世界中,对象是实际存在的个体。对象可以是有形的,例如一辆汽车,也可以是无形的,比如一个项目计划。对象是世界构成中的独立单元,具有静态和动态特征。静态特征可以用数据描述,而动态特征则体现在对象的行为或功能上。
面向对象方法中的对象
在面向对象方法中,对象是用来描述客观事物的一个实体,是构成系统的基本单位。一个对象由一组属性和一组行为组成。属性用来描述对象的静态特征,而行为则描述对象的动态特征。例如,一个汽车对象可能具有颜色、品牌和型号等属性,以及加速、转向和刹车等行为。
属性和行为
属性是对象的状态,可以用数据来表示。例如,汽车的颜色可以用字符串类型的数据来表示,而车速可以用数字类型的数据来表示。行为是对象的行为,可以用函数来表示。例如,汽车的加速行为可以用一个加速函数来实现。属性和行为共同构成了对象的完整描述。

1

1. 分类
分类是人类认知世界的一种基本思维方法。人类在长期的生产生活中不断总结经验,抽象出事物的共性,将具有相同性质的事物归类。例如,桌子、椅子、床都属于家具,它们都具有支撑物体、供人使用的功能。

2

2. 抽象
抽象是分类的依据。人类在抽象的过程中,忽略事物的非本质特征,只关注那些与当前目标相关的本质特征,从而找出事物的共性,并将其归类。例如,在研究交通工具时,我们会关注它们的功能,而不是它们的具体形状或颜色。

3

3. 面向对象中的类
面向对象方法中的“类”是对具有相同属性和服务的一组对象的抽象描述。它定义了该类所有对象的共同特征,包括属性和行为。例如,汽车类定义了汽车的属性,如品牌、颜色、型号,以及行为,如行驶、转向、刹车。

4

4. 类与对象的关系
类与对象的关系类似于模具与铸件的关系。一个属于某类的对象称为该类的一个实例。例如,一辆红色的宝马汽车是汽车类的一个实例。
封装
数据隐藏
封装是面向对象编程中的一个重要概念,它将对象的属性和方法结合成一个独立的单元,并隐藏对象的内部细节。这个过程类似于将数据和代码包裹在一个盒子中,只留下有限的接口供外部访问,从而保护内部数据免受外部的直接操作。
访问控制
封装通过定义访问权限来控制外部对对象的访问。通过使用访问修饰符,可以限制对数据和方法的访问,防止外部代码随意修改对象的内部状态,从而确保对象的完整性和一致性。这种机制类似于给盒子加锁,只有持有钥匙才能打开它。
提高代码可维护性
封装有助于提高代码的可维护性。当修改对象内部实现时,不会影响外部代码,因为外部代码只能通过接口访问对象。这就像更换盒子的内部零件,只要接口不变,外部代码就不需要重新编写,从而降低维护成本。
继承
软件复用
继承是面向对象编程中至关重要的概念,它使软件复用成为可能。通过继承,子类可以继承父类的属性和方法,从而减少代码重复,提高开发效率。
定义
特殊类对一般类的继承意味着特殊类对象拥有其一般类的所有属性和服务。这种关系类似于子类继承父类,子类拥有父类的特性。
示例
例如,我们可以将图形定义为一个一般类,而圆形则是一个特殊类。圆形继承了图形的属性和方法,同时还拥有自身特有的属性,例如半径。
多态性

概念
多态性是指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在一般类及其各个特殊类中具有不同的语义。

示例
例如,一个图形类可以定义计算面积的方法,而圆类和矩形类继承图形类,并分别实现计算圆形面积和矩形面积的方法。 这样,通过同一个方法调用,可以根据具体的对象类型,执行不同的计算逻辑,实现多态性的功能。
面向对象的软件工程
面向对象的软件工程
面向对象的软件工程是面向对象方法在软件工程领域的全面应用。它将面向对象的思想贯穿于软件开发的各个阶段,包括分析、设计、编码、测试和维护。面向对象的软件工程强调以对象为中心,将软件系统看作是一组相互协作的对象集合。
面向对象的软件开发
面向对象的软件开发过程通常包括以下几个阶段:面向对象的分析(OOA)、面向对象的设计(OOD)、面向对象的编程(OOP)、面向对象的测试(OOT)和面向对象的软件维护(OOSM)。
在每个阶段,面向对象的方法都提供了相应的工具和技术来帮助开发人员更好地理解和解决问题,提高软件开发的效率和质量。面向对象的软件开发方法已经成为现代软件开发的主流方法,广泛应用于各种领域,例如游戏开发、移动应用开发和企业应用开发。
分析
系统分析阶段
系统分析阶段主要关注系统应该做什么,而不考虑如何实现。它应该以简洁、精确的方式抽象出系统需求,并构建模型来描述系统行为和功能。分析阶段的成果是需求规格说明书,它为后续的设计和开发提供依据。
面向对象的分析
面向对象的分析方法直接利用问题域中的客观事物建立模型中的对象,并保留事物之间的关系。这种方法能够很好地映射客观事物,并简化分析过程。它可以使系统更易于理解、维护和扩展。
设计

1

1. 映射OOA模型
将OOA模型直接映射到OOD中,作为OOD的一部分。 这意味着将OOA阶段创建的类图、用例图、序列图等模型直接转化为OOD阶段的类定义、接口定义、方法实现等。

2

2. 补充实现细节
针对具体实现中的人机界面、数据存储、任务管理等因素补充一些与实现有关的部分。 这意味着需要根据具体的系统需求,设计用户界面,选择合适的数据库,并设计任务管理机制。

3

3. 设计步骤
设计阶段的关键步骤包括:定义类和对象、设计类之间的关系、设计方法和属性、设计用户界面、设计数据库、设计任务管理机制。

4

4. 设计文档
设计阶段需要输出设计文档,记录设计过程和设计结果。 这意味着需要创建详细的设计文档,包括类图、序列图、数据库设计、用户界面设计等。
编程
编程语言
面向对象的程序设计语言(OOPL)是实现面向对象方法的核心。常见的OOPL包括C++,Java,Smalltalk,Python等。选择合适的编程语言是高效开发的关键。
编码过程
编码过程就是将面向对象设计(OOD)模型中的每个组件用代码实现出来。这个过程需要程序员对OOPL的语法和语义有深刻的理解。
代码质量
代码质量直接影响软件的可靠性、可维护性和可扩展性。因此,编程过程需要遵循良好的编码规范,并进行严格的代码审查。
测试
测试的目的
测试的主要目的是发现软件中的错误。 测试人员通过各种手段执行测试用例,以发现程序中存在的错误,并记录这些错误以便开发人员进行修复。 测试可以提高软件的质量,降低维护成本。
面向对象测试
在面向对象的软件测试中,测试人员应继续运用面向对象的概念与原则来组织测试,以对象的类作为基本测试单位。 这种方法可以更准确地发现程序错误,并提高测试效率。
维护
持续改进
软件交付使用后,工作并未结束。根据软件运行情况和用户需求,需要不断改进系统。维护阶段需要进行缺陷修复、性能优化、功能扩展等工作。
面向对象方法优势
使用面向对象方法开发的软件,程序与问题域一致。在维护阶段运用面向对象方法,可以提高软件维护效率。例如,修改代码时,只需修改相关类,无需修改整个程序。
基本术语
源程序
源程序是用源语言编写的,有待翻译的程序。它包含了程序员的指令和逻辑,是计算机无法直接理解的。
目标程序
目标程序是源程序通过翻译程序加工以后所生成的程序,也称为“结果程序”。它是计算机可以理解和执行的机器语言代码。
翻译程序
翻译程序是指一个把源程序翻译成等价的目标程序的程序。它充当了源程序和计算机之间的桥梁,使程序员可以用更易理解的源语言编写程序。
三种不同类型的翻译程序
汇编程序
汇编程序是一种将汇编语言代码翻译成机器语言代码的程序。汇编语言是面向机器的低级语言,它使用助记符来表示机器指令。汇编程序将助记符转换成机器指令,使程序员能够更方便地编写代码。
编译程序
编译程序是将高级语言代码翻译成机器语言代码的程序。高级语言更接近人类语言,更容易理解和编写。编译程序将高级语言代码一次性翻译成完整的机器语言代码,然后再执行。
解释程序
解释程序也是将高级语言代码翻译成机器语言代码的程序。但它不同于编译程序,解释程序是边翻译边执行,即逐行翻译并执行代码,而不是一次性翻译成完整的机器语言代码。
程序的开发过程
1
编辑
程序员使用文本编辑器或集成开发环境(IDE)编写源代码。源代码是用高级编程语言编写的指令序列,例如C++。源代码被保存为后缀为cpp的磁盘文件。
2
编译
编译器将源代码转换为机器语言代码,也称为目标代码。目标代码是计算机可以理解和执行的指令序列。编译器还会检查代码语法错误和语义错误。
3
连接
链接器将多个源程序文件以及库中的某些文件连在一起,生成一个后缀为exe的可执行文件。链接器会将各个目标代码文件以及库文件中的代码整合在一起,并生成最终的可执行程序。
4
运行调试
运行可执行程序以测试其功能和性能。如果发现错误,需要进行调试。调试是指分析程序运行时出现的错误,并修改代码以修复错误。调试工具可以帮助程序员识别和解决错误。
信息的表示与存储
信息在计算机中的存储和处理是计算机科学的基础。了解信息的表示方式和存储原理对理解计算机程序的运行至关重要。计算机使用二进制数来表示各种信息,包括数字、字母、符号和图像。每个字符、数字和指令都被转换为二进制数,并在存储器中以位的形式存储。
存储器是一个存储数据的物理设备,可以是内存或硬盘。存储器分为多个单元,每个单元可以存储一个数据位。多个单元组合在一起形成字节,字节是计算机存储数据的基本单位。
计算机中的信息

1

1. 数据信息
数据信息是指计算机程序加工的对象,例如数字、字符、图像、音频和视频等。这些信息是计算机处理的原材料,需要经过程序的运算和处理才能转换成有意义的结果。

2

2. 控制信息
控制信息是指指挥计算机操作的指令,例如CPU执行的指令、内存读写的指令等。这些信息告诉计算机如何执行任务,以及如何处理数据信息。

3

3. 指令
指令是指计算机执行的基本操作,例如加减乘除、数据存储、数据读取等。每一条指令都对应着一个特定的操作,计算机按照指令的顺序执行,完成特定的任务。

4

4. 控制字
控制字是指令的一部分,它包含指令的地址、操作码和操作数等信息,用于控制计算机执行指令的过程。
信息的存储单位
位(bit,b)
位是度量数据的最小单位,表示一位二进制信息。一个位可以表示两种状态:0 或 1。位是计算机存储信息的最小单位,也是数据传输的最小单位。
字节(byte,B)
字节是由八位二进制数字组成,即 1 字节等于 8 位(1 byte = 8 bit)。字节是计算机中常用的数据单位,通常用于存储字符、数字和其他数据类型。
计算机的数字系统
二进制数字系统
计算机内部采用二进制数字系统进行信息处理。二进制系统仅使用 0 和 1 两种符号,并采用逢二进一的进位规则。这种系统与计算机的硬件设计相契合,便于用电子元件实现。
二进制系统的优点
二进制系统具有多种优点。它易于物理实现,可以用高低电平表示 0 和 1。二进制数运算简单,逻辑运算容易实现。使用二进制系统可以提高机器的可靠性,降低出错率。此外,二进制系统具有很强的通用性,适用于各种计算机系统。
二进制系统的缺点
尽管二进制系统拥有诸多优点,但对于人类来说,二进制数的可读性较差。与十进制相比,二进制数的位数较多,不易理解和记忆。对于人类来说,使用十进制进行数值表示更为直观方便。
程序设计中常用的数制
在程序设计中,信息都是以二进制形式存储在计算机中。然而,我们通常用十进制数来表示信息。因此,就需要将十进制数转换为二进制数,以便计算机能够理解和处理。除了十进制和二进制,在程序设计中还经常使用八进制和十六进制。
八进制和十六进制比二进制更简洁,更容易阅读和书写。它们经常被用作二进制数的简写形式。例如,十六进制数 0xAF 等价于二进制数 1010 1111。程序设计语言通常支持八进制和十六进制,允许程序员使用这两种数制来表示数据。
R 进制→十进制
将 R 进制数转换为十进制数,需要将每个数字与其对应的权值相乘,然后将所有乘积相加。权值是指每个数字在 R 进制数中的位置所代表的 R 的幂次方。
例如,二进制数 (11111111.11)2 中,每个数字的权值依次为 27、26、25、24、23、22、21、20、2-1 和 2-2。因此,该二进制数转换为十进制数为 1×27 + 1×26 + 1×25 + 1×24 + 1×23 + 1×22 + 1×21 + 1×20 + 1×2-1 + 1×2-2 = (255.75)10。

1

2

3

1

权值
每个数字在 R 进制数中所代表的 R 的幂次方

2

相乘
每个数字与其对应的权值相乘

3

相加
将所有乘积相加
十进制→ R 进制
十进制整数转换为R进制整数,可以使用“除R取余”法。将十进制数除以R,得到一个商和一个余数。余数即为R进制数的最低位。然后将商继续除以R,得到新的商和新的余数。余数即为R进制数的次低位。重复这个过程,直到商为0。将所有余数按从低位到高位的顺序排列,即得到R进制数。
例如,将十进制数68转换为二进制数。先将68除以2,得到商为34,余数为0。然后将34除以2,得到商为17,余数为0。再将17除以2,得到商为8,余数为1。继续将8除以2,得到商为4,余数为0。将4除以2,得到商为2,余数为0。将2除以2,得到商为1,余数为0。最后将1除以2,得到商为0,余数为1。将所有余数按从低位到高位的顺序排列,即得到二进制数1000100。
十进制→ R 进制(续)

1

“乘 R 取整”法
将十进制小数乘以R,然后取整数部分作为R进制小数的第一个数位。再将小数部分重复上述操作,直到小数部分为0或达到所需的精度为止。最后将所有整数部分按顺序排列,即为十进制小数的R进制表示。

2

举例
例如,将十进制小数0.3125转换为二进制小数,首先将0.3125乘以2,得到0.625,整数部分为0,小数部分为0.625。接着将0.625乘以2,得到1.25,整数部分为1,小数部分为0.25。以此类推,最终得到二进制数0.0101。

3

总结
十进制小数转换为R进制小数的关键是不断乘以R并取整数部分,直到小数部分为0或达到所需的精度为止。这是一种简单且有效的转换方法,在程序设计中经常被使用。
二、八、十六进制的相互转换

1

1. 二进制转换为八进制
将二进制数从右向左每三位一组,不足三位则在最左边补零,然后将每组三位二进制数转换为相应的八进制数。例如,二进制数 (1011010.10)2 可以转换为 (001 011 010 .100)2,然后分别转换为八进制数 1、3、2 和 4,最终得到 (132.4)8。

2

2. 二进制转换为十六进制
将二进制数从右向左每四位一组,不足四位则在最左边补零,然后将每组四位二进制数转换为相应的十六进制数。例如,二进制数 (1011010.10)2 可以转换为 (0101 1010 .1000)2,然后分别转换为十六进制数 5、A 和 8,最终得到 (5A.8)16。

3

3. 十六进制转换为二进制
将十六进制数的每一位转换为四位二进制数,例如,十六进制数 (F7)16 可以转换为 (1111 0111)2。

4

4. 进制之间的转换总结
每位八进制数相当于三位二进制数,每位十六进制数相当于四位二进制数。通过这种方式,可以方便地进行二进制、八进制和十六进制之间的相互转换。
二进制数的编码表示:原码
原码是一种简单的编码方式,它直接将二进制数的符号位和数值位拼接在一起。符号位用一位表示,用“0”表示正数,用“1”表示负数。数值位则表示数的绝对值。例如,十进制数+5的原码为00000101,十进制数-5的原码为10000101。
原码的优点是简单易懂,但缺点也很明显。首先,零的表示不唯一,因为正零和负零的原码分别为000...0和100...0。其次,进行四则运算时,符号位需要单独处理,运算规则也比较复杂。
二进制数的编码表示:反码
反码的定义
反码是二进制数的一种编码表示方式。它将原码中符号位保持不变,而将其他各位取反。例如,-1100110 的原码为 11100110,其反码为 10011001。反码的求取方法简单易懂,但在实际计算中并不常用。
反码的特性
正数的反码与原码表示相同。负数的反码与原码有如下关系:符号位不变,其余各位取反。反码中零的表示也不惟一,例如 +0 的反码为 00000000,而 -0 的反码为 11111111。反码只是求补码的中间码,在实际计算中通常使用补码。
二进制数的编码表示:补码
模数
n位整数(包括一位符号位),则它的模数为2n。n位小数,小数点前一位为符号位,则它的模数为2。模数用于确定补码的范围,保证负数的补码可以正确地表示。
补数
一个数减去另一个数,或者说一个数加上一个负数,等于第一个数加上第二个数的补数。这可以使用时钟指针的例子来解释。8+(-2)=8+10 (mod 12),这是一个模12运算,在补码中,也类似的模运算。
求补码
一个二进制负数可用其模数与真值做加法 (模减去该数的绝对值) 求得其补码。例如,-3 的补码可以用模数 8 (对于 3 位二进制数) 减去 3 的绝对值,即 8-3=5。在二进制中,5 是 101,所以 -3 的补码是 101。
二进制数的编码表示:补码(续)
计算机中的补码表示法
计算机中使用补码表示法,能够将加减运算统一成加法运算。负数的补码表示,通过对原码取反再加1得到。补码的优点是简化了计算机的硬件设计,并且提高了运算速度。
补码运算规则
在补码表示法中,符号位可以参与运算。减法运算可以转化为加法运算,将减数的补码加到被减数上,就可以得到差值。补码运算的结果也是补码,可以用相同的方法来进行判断。
运算结果溢出
在补码运算中,可能会出现溢出情况。负数之和得正数,或者正数之和得负数,都说明运算结果发生了溢出。为了避免溢出,需要使用更大的数据类型来存储运算结果。
实数的浮点表示
浮点数表示
计算机中通常采用浮点方式表示小数。一个数N用浮点形式表示可以写成:N=M×2E。E表示2的幂,称为数N的阶码。阶码确定了数N的小数点的位置,其位数反映了该浮点数所表示的数的范围。
尾数
M表示数N的全部有效数字,称为数N的尾数。其位数反映了数据的精度。尾数的位数越多,表示的数字精度越高。
实数的浮点表示(续)
浮点数的具体格式随不同机器而有所区别。例如,假设有一台16位机,其二进制浮点数组成为阶码4位,尾数12位,则浮点数格式如下:
其中,阶码用来表示浮点数的指数部分,尾数用来表示浮点数的有效数字部分。由于计算机中存储的是二进制数,因此浮点数的表示方式也需要转换成二进制形式。这种二进制形式的浮点数表示方法被称为浮点表示法。
数的表示范围
机器中数的表示范围与数据位数及表示方法有关。一个M位整数(包括一位符号位),如果采用原码或反码表示法,能表示的最大数为2m-1 -1,最小数为-(2m-1 -1)。
若用补码表示,表示范围为-2m-1 ~ 2m-1 -1。n位定点小数采用原码或反码表示时,范围为-(1-2-n )~(1-2-n )。采用补码表示时,范围为-1 ~(1-2-n )。
浮点数的表示范围由阶码位数和尾数位数决定。若阶码用r位整数(补码)表示,尾数用n位定点小数(原码)表示,则浮点数范围是:2r-1 -1 * (1-2-n ) ~ -(2r-1 -1) * (1-2-n )。
非数值信息的表示

1

1. 字符编码
字符在计算机中需要用编码表示,以便计算机能够理解和处理。 ASCII码是一种常用的西文字符编码,用7位二进制数表示一个字符,最多可以表示128个字符。 EBCDIC码使用8位二进制数表示一个字符,最多可以表示256个字符。

2

2. 汉字编码
国标码(GB2312-80)是应用较为广泛的汉字编码标准,使用二字节码,即用两个7位二进制数编码表示一个汉字。 国标码包含了常用的6763个汉字,以及一些非汉字字符。

3

3. 其他编码
除了ASCII码、EBCDIC码和国标码,还有其他编码方式,例如Unicode、UTF-8等,它们可以表示更多字符,包括各种语言的文字和符号。
浏览课本
翻阅课本
下面,我们会一起翻阅课本。
询问助教
在这个过程中,有任何不明白的地方,可以询问助教

udify.app

Dify

配置 AI 编程助手
AI 编程助手可以帮助您提高编程效率,减少错误。 您可以通过配置助手来定制其功能和行为,使其更符合您的需求。
配置 AI 编程助手需要您了解其提供的功能和参数,并根据您的具体需求进行设置。

hdu-cvqdbot.gamma.site

新篇章:大模型技术的实践与探索

随着人工智能技术的发展,大型语言模型 (LLM/LMM) 已经成为一个重要的研究方向。LLM 在自然语言处理、代码生成、文本摘要、机器翻译等领域展现出巨大的潜力,为各行各业带来了新的可能性。 这是2023年以来第三个主要更新版本