| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C语言第一章基础知识(下) -> 正文阅读 |
|
[C++知识库]C语言第一章基础知识(下) |
1.5进制间转换与数据存储1.5.1 十进制数据与二进制数据的相互转换既然计算机只能处理二进制数,大家就要熟悉这种数据。我们日常用到的十进制数据与二进制数据如何相互转换呢?其实,各种进制的数据都遵循一个规律,就是逢N进1,这里的N称为基数,N是几,就是几进制。N指定用这种进制表示一个数需要用到的不同数字总和,例如,十进制,是逢10进1,它的基数N就是10,共有0~9这10个不同的数字来表示一个数据。很显然,如果N为2的话,就是逢2进1,就只有两个不同的数字来表示数据,这两个数字就是0和1。 对于N进制的数据,各个位上的数字表达的值是不一样,例如十进制中11这个数据,第2位(左边)的1表示的数值为102-1,而二进制数11,第2位的1表示的22-1,所以进制不同,表示的数值是不一样的。对于N进制的整数数据,第n位上数字表示的值就是该位上的数字乘以N?n-1,对于小数,各位上的数字表示的值是N-n。这个“N的次方”称为位权。 一个十进制数转换进二进制数的方法如下。 (1)对于整数部分,采用除2取余法。这种方法就是对整数除以2,得到商和余数,然后对商继续除以2得到商和余数,直到商为0为止,然后余数从后往前顺序组成一个二进制数,这个二进制数就是该十进制整数的二进制表示。以下是十进制的87一直除以2的商和余数。 43 ??1 21 ??1 10 ??1 5 ???0 2 ???1 1 ???0 0 ???1 最后一行商为0,把余数从最后一个向前顺序排列形成2进制数,所以十进制数87的二进制数表示就是1010111。 (2)小数部分的转换。把十进制的小数部分乘以2,然后取出整数部分,再把小数部分继续乘以2,一直到小数部分为0为止,把取出的整数部分按先后顺序排序就形成一个二进制数序列,这就是十进制小数的二进制表示。 ????以下是十进制数0.8125,转换成2进制形式,乘以2后取出的小数部分和整数部分。 0. 625 ????1 0.25 ?????1 0.5 ??????0 0 ????????1 所以,十进制数0.8125的小数部分的二进制数就是1101。所以十进制数87.8125转换成的二进制数就是1010111.1101。 二进制数据转换为十进制非常简单,就是把二进制各位上的数乘以该位的位权。 1.5.2 十进制与八进制、十六制数的相互转换这些数制与十进制数的相互转换原理与1.5.1节所描述的二进制与十进制数的相互转换原理一样,只是把相应的基数N调整一下就行。 但这里要特别说明一下,对于十六进制数,由于要有16个不同数字表示数据,所以除了0~9这10个数字以外,还增加了A,B,C,D,E,F这6个数字,分别表示十进制的10到15这6个数。例如十进制数12,就是数字C,15就是数字F。 在C语言中,如果要在源代码中写一个十六进制数,开始部分应先写上0x,例如写十六进制F5,则要写成0xF5。如果写一个八进制表示的数,开始部分应先写上0,例如写八进制的55,则要写成055。 由于篇幅所限,这部分的内部不作详细阐述,大家可以自行研究,进一步熟悉。值得强调的是计算机内存中存放的数据是二进制的,但人在编写C程序时,数据可以用十进制、八进制和十六制表示。 1.5进制间转换与数据存储1.5.1 十进制数据与二进制数据的相互转换既然计算机只能处理二进制数,大家就要熟悉这种数据。我们日常用到的十进制数据与二进制数据如何相互转换呢?其实,各种进制的数据都遵循一个规律,就是逢N进1,这里的N称为基数,N是几,就是几进制。N指定用这种进制表示一个数需要用到的不同数字总和,例如,十进制,是逢10进1,它的基数N就是10,共有0~9这10个不同的数字来表示一个数据。很显然,如果N为2的话,就是逢2进1,就只有两个不同的数字来表示数据,这两个数字就是0和1。 对于N进制的数据,各个位上的数字表达的值是不一样,例如十进制中11这个数据,第2位(左边)的1表示的数值为102-1,而二进制数11,第2位的1表示的22-1,所以进制不同,表示的数值是不一样的。对于N进制的整数数据,第n位上数字表示的值就是该位上的数字乘以N?n-1,对于小数,各位上的数字表示的值是N-n。这个“N的次方”称为位权。例如,。 一个十进制数转换进二进制数的方法如下。 (1)对于整数部分,采用除2取余法。这种方法就是对整数除以2,得到商和余数,然后对商继续除以2得到商和余数,直到商为0为止,然后余数从后往前顺序组成一个二进制数,这个二进制数就是该十进制整数的二进制表示。以下是十进制的87一直除以2的商和余数。 43 ??1 21 ??1 10 ??1 5 ???0 2 ???1 1 ???0 0 ???1 最后一行商为0,把余数从最后一个向前顺序排列形成2进制数,所以十进制数87的二进制数表示就是1010111。 (2)小数部分的转换。把十进制的小数部分乘以2,然后取出整数部分,再把小数部分继续乘以2,一直到小数部分为0为止,把取出的整数部分按先后顺序排序就形成一个二进制数序列,这就是十进制小数的二进制表示。 ????以下是十进制数0.8125,转换成2进制形式,乘以2后取出的小数部分和整数部分。 0. 625 ????1 0.25 ?????1 0.5 ??????0 0 ????????1 所以,十进制数0.8125的小数部分的二进制数就是1101。所以十进制数87.8125转换成的二进制数就是1010111.1101。 二进制数据转换为十进制非常简单,就是把二进制各位上的数乘以该位的位权。 1.5.2 十进制与八进制、十六制数的相互转换这些数制与十进制数的相互转换原理与1.5.1节所描述的二进制与十进制数的相互转换原理一样,只是把相应的基数N调整一下就行。 但这里要特别说明一下,对于十六进制数,由于要有16个不同数字表示数据,所以除了0~9这10个数字以外,还增加了A,B,C,D,E,F这6个数字,分别表示十进制的10到15这6个数。例如十进制数12,就是数字C,15就是数字F。 在C语言中,如果要在源代码中写一个十六进制数,开始部分应先写上0x,例如写十六进制F5,则要写成0xF5。如果写一个八进制表示的数,开始部分应先写上0,例如写八进制的55,则要写成055。 由于篇幅所限,这部分的内部不作详细阐述,大家可以自行研究,进一步熟悉。值得强调的是计算机内存中存放的数据是二进制的,但人在编写C程序时,数据可以用十进制、八进制和十六制表示。 1.5.3 数据存储前文述及,CPU和内存是由数字IC (Integrated Circuit,集成电路)构成的,现代计算机内部电子部件基本都是这种电路。 IC的这种特性使得计算机的数据只能用二进制来表示,二进制只能由0和1来表示数据,前文讲的一个bit(位)就是这里的一个引脚,如果此时这个引脚电压是5V,就表示数字1,0V就表示数字0。图1-7中,假设下排8个引脚是用来进行数据输出的,如果某个时刻这些引脚上的电压分别是0V,5V,0V,5V,0V,0V,5V,0V,则表示输出的数据为二进制的01010010。 计算机中的存储器是用来存储程序和各种数据信息的记忆部件。存储器可分为主存储器(简称主存或内存)和辅助存储器(简称辅存或外存)两大类。现在的主存和一部分辅存的最小存储单元是由半导体电路构成,它能存储一个电状态,有高或低两种形式,可表示1或0。辅助存储器中,如机械硬盘的存储数据主要应用磁表面存储材料,它根据磁表面单位区域下的磁性不同表示0和1;固态硬盘是用采用Flash芯片作为存储介质来存储0和1。辅助存储器可以长时间存放数据,断电后数据不会消失。 1.6 什么是算法算法一般描述为解决问题的确定性步骤和方法。算法一词最早出现在公元825年(我国唐朝时候),波斯数学家阿勒·花剌子密在所写的《印度数字算术》中,如今普遍认可的算法定义是:算法是解决特定问题求解步骤的描述,在计算机中表现为解决问题的有限指令序列,并且每条指令表示一个或多个操作。它具有五个特征。 (1)有穷性(Finiteness):指算法必须能在执行有限个步骤之后终止。 (2)确切性(Definiteness):算法的每一步骤必须有确切的定义。 (3)输入项(Input):一个算法应有0个或多个输入,0个输入是指算法本身定出了初始条件。 (4)输出项(Output):一个算法有一个或多个输出,没有输出的算法是无意义的。 (5)有效性(Effectiveness):算法中执行的任何计算步骤都可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成。 针对同一个问题,可以有不同的算法,即不同的解决这个问题的确定性步骤,反映到计算机中就是有不同的符合算法上述五个特征的指令序列。 例如,计算1+2+...+n,就是一个待解决的问题,可以有这样的算法步骤:先把sum=0,然后计算sum=sum+1中,再计算sum=sum+2,一直计算到sum=sum+n,最后sum中的值为计算结果。这就是这个问题的一个算法,它满足上述5个特征。另外,针对这个问题,可以直接用等差数列求和公式直接计算出:sum=n(n-1)/2,这也是一个算法。 上面写的算法步骤只是一种非正式的叙述,要正规描述一个算法,给出它的具体步骤,常用的有自然语言描述、结构化流程图描述、伪代码描述等方法。 (1) 自然语言描述。自然语言就是人们日常使用的语言,可以是汉语或英语或其它语言。用自然语言表示通俗易懂,但文字冗长,容易出现“歧义性”。例如,求200-500能被5整除的数,用自然语言描述解决这一问题的算法可写为 步骤1 I=200。 步骤2 如果I能被5整除,输出I。 步骤3 I=I+1。 步骤4 如果I小于等于500,返回Stpe 2,否则结束。 (2) 用流程图描述。ANSI (American National Standard Institute,美国国家标准化协会)规定了一些常用的流程图符号。 流程图的优点是过程技术清晰,不依赖于计算机语言,缺点是画起来费事,不易阅读和修改。 (3) 伪代码描述算法。伪代码是一种非正式的,类似于英语结构的语言。用它描述算法的优点是书写方便,结构紧凑,易于阅读和修改,缺点是伪代码难以统一。还以“求200-500能被5整除的数”这个问题为例,用伪代码来描述这个算法如下。 Intput I=200 Do while(I<=500) if I%5==0 ?????????output I ???????I=I+1 ????loop 总之,描述算法各有特点,可以自由选择。 1.7 C语言源代码介绍及运行1.7.1 C语言源代码介绍一个完整的C语言程序源代码,绝大多数都有且只有一个main函数(也可以通过特殊处理不需要,但本书要求一个完整的C程序源代码必须有一个main函数),这是程序执行的入口。下面是一个非常简单的C语言源代码: /* 一个简单的C语言源代码,用于计算并输出两个数的和。 */ #include <stdio.h> int main(void) { int sum=0,a=3,b=4; ?//定义变量 sum=a+b; ????????? printf(“sum=%d”,sum); //输出a、b的和。 return 0; } 大家目前不需要理解为什么这样写,只要对这个源代码有一个感性认识就行,源代码中的“//文本”是行注释,“/*文本*/”用于一行或多行注释。注释是对代码的解释和说明,其目的是让阅读代码的人能够更方便理解代码的作用,注释是给人看的,并不参与代码的执行过程。 通过前面的介绍,计算机不能直接执行这段源代码,因此,在写完源代码以后,就要进行编译,让它变成机器语言描述的代码,然后计算机再执行。上面这段程序代码在编译完成以后,执行它,计算机输出: sum=7。 那么,在哪里写源代码,又如何进行编译,出现错误如何修改,又如何执行编写的程序呢?下面对这些问题进行阐述。 一种能用于C语言的集成开发环境软件可以解决上述问题,能用于C语言的集成开发环境软件比较多,早期版本如Turb C,VC++6.0,现在通常用的有Dev c++、Vs2019、C-free、C4droid?(Android系统手机版)等等,它们都能带相应的编译器,能利用它们进行编写源代码、调试代码、编译等等开发软件的工作,要使用这种开发环境软件,首先要安装它,安装完成后,再使用。 1.8 C语言的学习1.8.1 为什么要学习C语言计算机语言总体来讲是一种解决问题的工具,C语言是计算机界公认的优秀语言,语言本身逻辑性强,科学严谨,非常灵活且效率高,还可以方便操纵计算机硬件,有其它高级语言不可替代的优势。 学习C语言还可以为学习其它高级语言打下基础,尤其是像C++、C#、Java、python这些目前在计算机界比较受欢迎的语言都与C语言有着密切的关系,C语言大部分的语法和思想都在C++、C#、Java和python中得到了继承,所以学好C语言使得你今后学习这些语言变得容易而快速。举一个简单的例子,例如Java语言没有用到像C语言中的指针,但Java中有“引用”的概念就需要很好地了解指针才能掌握。通过C语言的学习,可以培养编程思维和计算思维,所以有深厚的C语言功底,再学习其它高级语言就会变得容易得多,但需要指出的是深厚的功底并非一两日的努力所能成就。 C语言的应用范围非常广,它是计算机硬件设计与开发、软件开发各个方面都受欢迎的工具,下面列出几个方面的应用。 (1)公众经常接触到的计算机操作系统如UNIX、Linux、Windows都是用C语言开发的。很多计算机高级语言本身也是用C开发出来的,如CPython。我们国家现在还缺少这样的成果,C作为一种优秀的工具,可以为更多优秀高级语言的出现带来方便。 (2)C语言经常用于编写硬件的驱动程序(硬件设备要能完成相应功能,要有软件的配合才能起作用)。 (3)C语言是许多软件的开发语言。如许多大型数据库软件(SQL Server、MySQL)以及一些应用软件(WPS、Photoshop)都是C写出来的。例如,当单击WPS的save去保存文件时,计算机如何真正去保存,各种数据如何处理格式,图片、表格以方式来存储等等,这些都是用C语言实现的。再例如在Photoshop中只要简单点击几下鼠标往往就可以实现相应功能,这些功能也是由C语言写的程序去实现的。 (4)C语言可写游戏程序,如反恐精英的游戏引擎全部是由C语言写出的。 (5)C语言可以应用到嵌入式开发,目前可以理解为在芯片上写程序,例如在单片机和ARM上进行的开发等。简单的例子是大家经常接触到的冰箱和洗衣机上的控制设备、摄像机上的视频压缩设备、手机上的视频解码芯片等等,这些设备中的程序绝大多数都有C语言的应用。 一门计算机高级语言都有其独到的功能和不足之处,C语言优点多,但不善于写漂亮的软件界面。初学C语言的人,经常会因为C不能很好地写出漂亮的界面而失去学习热情,这一般都是因为把编程的概念狭窄化了,认为编程的目标就是写出能为用户提供可操作界面的应用程序,他们往往没有考虑到,这些界面是如何用代码写出来的,当中又与C语言有何关系。例如大家上网时,浏览器界面中,鼠标移动、移动到哪里,滚动条移动时部分文字的出现和消失等这些都有C语言的背景。因此,C在一些可视化编程上并不强,但很多有强大界面功能的软件背景都有C的功能。 |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 23:15:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |