IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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语言入门——(第一讲——一些计算机基础)

从基础开始分享一些C语言的知识,主要是讲怎么从不懂C语言切入到学习C语言、以及一些主要的知识。学习语言并不是0基础的,要涉及到一些其他的知识,所以先浅谈一下。

文章目录


0.C语言的发展历史

????????对于学习一个新东西来说,简要了解它的发展历史是很有必要的,这能够增强学习乐趣、健壮知识体系、也迎合了学习者对知识由易到难的接受心理,这里先说明,我不讲C语言是谁在多少年发明的这些,我只是简要的理通逻辑。

????????首先,从一个众所周知的结论开始,计算机只认识0和1,这是因为计算机最底层是硬件电路。人们希望计算机按照指定的要求进行工作(早期就是进行计算),就需要给计算机下达指令。最早期的计算机指令就是通过二进制序列控制电路,从而控制计算进行相应的工作,但这显然太不方便了,每一种指令都需要一串二进制序列,后面有了汇编语言,用一些指令名称指代二进制序列,所以一定要知道那几种常用的进制、进制之间的转化(包括整数和带有小数的)。人们一直在尝试用更简单的、更符合人类语言的一种编程语言去指挥计算机进行工作,后面就有了B语言、new B 语言(C语言)、C++、Java 、python等一系列编程语言。

1.C语言的特性

????????C语言是面向过程的编程语言,上述其他几类是面向对象的编程语言。所谓面向过程于面向对象,本质上是由于C语言不支持类和对象这个概念,大家如果了解一点C/C++的话,就知道C里面的结构体只能放变量进去,而C++的类可以放变量和函数进去。当我们要对结构体和类里面的一些变量进行操作的时候(比如简单的打印),面向过程的话就必须把结构体当作参数传给一个函数,在函数体内部实现,最后在主函数中调用该函数,这样就没有一种整体性。而面向过程的话就直接在类里面写一个成员函数A,成员函数A直接拿到类里面的数据进行操作,当使用类实例化一个对象B的时候,对象B就能调用成员函数A,这种通过对象来调用成员函数实现功能的方式就叫面向对象,具有很强的整体性,也方便程序员理清逻辑。

2.C语言标准

????????无论你的编程语言如何花里胡哨,计算机还是只认识0和1,语言越高级只是方便人类书写使用,而计算机底层还是没有变。所以就需要有一个翻译官来将非二进制的语言翻译给计算机,这就需要编译器链接器等一系列的工具。

????????为了大家书写的代码可以有更好的可移植性、规范性(不能说这家公司说我的关键字是这些,那家公司说我的关键字是这些),就制定了一些C语言标准,从最初的C89,到C99,再到C11,分别代表1989年、1999年、2011年发布的C语言标准。由于每种语言的标准不是固定死的,是一种具有一定灵活性的标准(比如说某类型字节数大于等于多少就可以),并且有些编译器并不是完全执行标准的、不是执行最新标准的,所以每个编译器就会产生细微的差别,并且每个编译器都有自己的优缺点。有时候你会发现有些代码在微软编译器VS下能够正常运行,拿到 GCC下就不行了,一堆报错信息,或者反过来,在GCC上能运行的代码在VS下不能运行。这是因为不同的编译器支持不同的标准,并且 每个编译器为了自己的利益和需求都进行了自己的扩展,假如你使用了微软编译器私有的扩展函数,那么拿到 GCC 下肯定是不支持的。

????????对于学习来说,基本都是基于C89标准来讲的,并且这些标准基本都是向下兼容的,除了很少部分是删除和增加的,总的来说,影响不大。

3.计算机基础

3.1二进制

????????计算机要处理的信息是多种多样的,如数字、文字、符号、图形、音频、视频等,这些信息在人们的眼里是不同的。 但对于计算机来说,它们在内存中都是一样的,都是以二进制的形式来表示。 要想学习编程,就必须了解二进制,它是计算机处理数据的基础。你至少应该了解以下内容:

????????1.不同进制转成十进制:加权法则,整数部分从右往左,0次方开始,小数部分从左往右,-1次方开始。

????????2.十进制转化为不同进制:火勾除法,商0为止,余数倒写。

????????3.2-8-16进制的互换:每3位二进制表示一个8进制位,每4个二进制位表示一个16进制位。

????????4.原码、补码、反码

????????如果不懂的话,就去补一下二进制的知识吧。

????????如果你懂了二进制,那么可以说计算机的数字是靠拼出来的,所以对于有一些数字只能无限接近永远达不到。你可以理解为十进制中的无限小数,比如三分之一,也就是3的-1次方,十进制就无法找到一个确切的有限数值跟它相等。这就可以帮助你后面知道浮点数比较取逻辑值的时候为什么明明感觉相等的两个数是不等的。

3.2内存

????????对于那些五花八门的程序你肯定好奇是怎么跑起来的,首先,有一点你要明确,你安装的软件是保存在硬盘中的。你双击图标,系统就会知道你要运行这个软件,操作系统会将软件数据从硬盘中复制到内存,利用内存的快速读写能力使你的程序跑起来更加流畅,你的软件在加载的时候(也就是载入内存,需要用到加载器)会比较卡就是因为从硬盘到内存需要一定的时间。同时内存是RAM,掉电丢失数据,硬盘是ROM掉电不丢失数据,比如你正在运行一个编辑软件,突然关机了,那你的数据永远找不回来,但是如果你保存了就会存储在硬盘,掉电也没事。不过现在很多软件都有防掉电数据丢失的措施,所以偶尔运气好你会觉得掉电了数据还在。

????????内存条是一个非常精密的部件,包含了上亿个电子元器件,它们很小,达到了纳米级别。这些元器件采用TTL电平,也就是逻辑电平,+5V就是1,0V就是0。通过电路来控制这些元器件的通断电,会得到很多 0、1 的组合,给每一种组合赋予特定的含义,就能实现含义指定的功能。

????????1 个元器件称为 1 比特(Bit)或 1 位,8 个元器件称为 1 字节(Byte),还有KB、MB、GB。在内存中没有字符,也没有 gif、jpg 这样的图片,只有 0 和 1 两个数字,计算机也只认识 0 和 1。 所以,计算机使用二进制,而不是我们熟悉的十进制,写入内存中的数据,都会被转换成 0 和 1 的组合。

????????对于读写速度,内存 > 固态硬盘 > 机械硬盘。机械硬盘是靠电机带动盘片转动来读写数据的,而内存条通过电路来读写数据,电机的转速肯定没有电的传输速度(几乎是光速)快。虽然固态硬盘也是通过电路来读写数据,但是因为与内存的控制方式不一样,速度也不及内存。

????????当程序运行需要的空间大于内存容量时,操作系统会将内存中暂时不用的数据再写回硬盘;需要这些数据时再从硬盘中读取,并将另外一部分不用的数据写入硬盘。这样, 硬盘中就会有一部分空间用来存放内存中暂时不用的数据。这一部分空间(运行需要的空间-内存容量)就叫做虚拟内存,虚拟内存是在硬盘不是在内存!硬盘的读写速度比内存慢很多,反复交换数据会消耗很多时间,所以如果你的内存太小,会严重影响计算机的运行速度,甚至会出现”卡死“现象,即使 CPU 强劲,也完全没用,这是在内存角度限制了计算机性能。

? ? ? ? 当然,上面说的是物理内存,在编程的时候只能用虚拟内存,然后操作系统会将虚拟内存映射到物理内存。如果你接触过编程,那些书本上肯定会跟你说地址是从0x00000000 - 0xffffffff,每个地址所指向的容量为一个字节,一共只有4GB的内存空间。你肯定会想,我明明加了内存条啥的十几个GB呢,其他的被吃了?这不是哄人吗!你有十几个GB的物理内存是真的,老师说的地址在32位平台下只有4GB也可以说是对的,只是他没有说这是虚拟内存。有些知识是有边界的,所以到此为止,我只是点一下,消除有疑惑的人心中的疑惑,后面有空细讲。

3.3ASCII编码

????????有的人肯定在想,我平时在屏幕上看到的字我都认识啊,难道计算机也懂我的语言吗?想啥呢,计算机只懂0和1,那为什么它反映到屏幕的就是我看得懂呢?那就是用到了ASCII编码,这样说好像不太准确,因为这是二进制与英文字符之间的转换,其他国家的文字也是类似的,比如中国的GBK编码,国际的UTF-8等。你要显示什么你得先有这些字符,这就是常说的字符集。二进制数据与字符通过字符集和字符编码联系起来,也可以说成是多了一次翻译,让人们就可以看懂。起初计算机是美国人发明的,所以最先考虑的就是美国所用的拉丁文字母、阿拉伯数字、特殊符号等显示字符和一些常用的控制字符。实际显示在电脑上屏幕上的是类似于一种图片的东西,可以理解为图片,反正也不深究,够自己理解就行。总的来说,计算机显示文字或者存储文字,就是一个查表的过程。

3.4GB2312编码\GBK编码\GB18030编码

????????计算机在广泛流行的过程中遇到的一个棘手问题就是字符编码,计算机是美国人发明的,它使用的是 ASCII 编码,只能显示英文字符,对汉语、韩语、日语、法语、德语等其它国家的字符无能为力。为了让本国公民也能使用上计算机,各个国家(地区)也开始效仿 ASCII,开发了自己的字符编码。这些字符编 码和 ASCII 一样,只考虑本国的语言文化,不兼容其它国家的文字。这样做的后果就是,一台计算机上必须安 装多套字符编码,否则就不能正确地跨国传递数据,例如在中国编写的文本文件,拿到日本的电脑上就无法打开,或者打开后是一堆乱码。

????????不同的编码只是收录的文字个数内容不太一样,比如最先为了赶快完成这项工作,肯定有些汉字是没有被收录进去的,特别是中国还有很多的繁体字。所以只是一种完善,并没有太大的改变。并且基本上都是兼容ASCII的,也就是占用的那些编码值不变,当然不同国家的字符多少程度不一样所用到的字节数也不一样。一般常用的就用较小的编号,进而选用较少的字节数。总的来说,越常用的字符占用的内存就越少,越稀奇古怪的字符占用的内存就越多,因为编号都比较靠后。在中文版的Windows经常用到的都是GBK。

????????计算机全世界都在用,跨国交流也越来越多,如果每次跨国交流都需要转码那也太麻烦了,所以Unicode 诞生了。Unicode 也称为统一码、万国码;看名字就知道,Unicode 希望统一所有国家的字符编码。Unicode 可以使用的编码方案有三种,分别是:

????????UTF-8:一种变长的编码方案,使用1~6个字节来存储。

????????UTF-32:一种固定长度的编码方案,不管字符编号大小,始终使用4个字节来存储。

????????UTF-16:介于UTF-8和UTF-32之间,使用2个或者4个字节来存储,长度既固定又可变。

????????只有UTF-8兼容ASCII,UTF-32和UTF-16都不兼容 ASCII,因为它们没有单字节编码,常用的也就是UTF-8。知道了编码这些估计也就知道了为什么有时候程序会乱码的问题。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:22:12  更:2022-10-08 20:25:11 
 
开发: 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年5日历 -2024/5/19 6:00:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码