关闭

补课

134人阅读 评论(0) 收藏 举报
学习c语言的一些中遇到的薄弱知识点:

      1.计算机方面的知识:

           不管是台式机还是笔记本,它们内部都有一块电路板,上面密密麻麻地布满了大小不一的电子器件,包括CPU、内存条、网卡、各种插槽和接口等,这就是“主板”,如下图所示。

这张图片主要让读者了解主板的构造,你不必理解图片中各个晦涩的名词。

图1:计算机主板

CPU

CPU (Central Processing Unit) 就是“中央处理器”,是计算机的大脑,负责计算、思考、处理数据、控制其他设备等,没有CPU,计算机就无从谈起,CPU的速度直接决定了电脑的运行速度。如下图所示:

图2:CPU

目前市场上常见的应用于台式机和笔记本的CPU有 Intel(英特尔) AMD(超微半导体公司),Intel 性能好一点,占据了大部分份额。
关于CPU的位数,我们将在《C语言和内存》中的《虚拟地址空间以及编译模式》一节讲解。
CPU有很多针脚,直接插在主板上,如下图所示:

图3:CPU插槽

内存

内存就是下面的长方形“卡片”,也叫内存条

图4:内存条

我们常说电脑有几个G的内存,就是指它的大小,市面上常见的有2G、4G、8G等。
C语言程序必须加载到内存才能运行,CPU 也被设计为只能从内存中读取数据和指令,一名不了解内存的程序员,注定无法彻底理解程序的运行原理,不能让自己的编程水平有一个质的飞越,因此我们特地增加了《C语言和内存》专题,让大家彻底明白内存,并运用到实际编程中。
内存条插在主板上的特定插槽内,如下所示是台式机的内存插槽:

图5:台式机内存插槽

不过笔记本为了节省空间,一般将内存条平放,如下所示:

图6:笔记本内存插槽

主板上一般有多个内存插槽,可以插多个内存条,电脑内存大小是所有内存条大小之和。内存条也被称为主存

硬盘

硬盘是用来保存数据的。打开一个文件,编辑完成后,Ctrl+S 就保存到了硬盘,断电不会丢失。硬盘分为机械硬盘(HDD)固态硬盘(SSD)

机械硬盘就像VCD或DVD,由一个精密电机带动光盘快速转动来让探头读取和写入数据。如下图所示:

图7:机械硬盘

固态硬盘就像手机内存卡或U盘,内部有上亿个电子元器件,非常细小,达到纳米级别,通过电路来读取和写入数据。如下图所示:

图8:固态硬盘

与机械硬盘相比,固态硬盘在读写速度上有很大优势,一个很明显的例子就是电脑安装了固态硬盘开机速度很快,很少出现卡顿的现象。

硬盘不是直接插在主板上,而是通过导线与主板相连,所以叫外部存储,也是电脑外设的一部分,不过不像鼠标、键盘、U盘等,没有也可以正常工作,硬盘是电脑正常运行所必需的外部设备。

协调

CPU、内存、硬盘等部件不能各自为战,它们通过主板连接在一起,由CPU控制,协调工作。

2.程序与内存:

       如果你的电脑上安装了QQ,你希望和好友聊天,会双击QQ图标,打开QQ软件,输入账号和密码,然后登录就可以了。

那么,QQ是怎么运行起来的呢?

首先,有一点你要明确,你安装的QQ软件是保存在硬盘中的。

双击QQ图标,操作系统就会知道你要运行这个软件,它会在硬盘中找到你安装的QQ软件,将数据(安装的软件本质上就是很多数据的集合)复制到内存。对!就是复制到内存!QQ不是在硬盘中运行的,而是在内存中运行的。

为什么呢?因为内存的读写速度比硬盘快很多。

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

所以,不管是运行QQ还是编辑Word文档,都是先将硬盘上的数据复制到内存,才能让CPU来处理,这个过程就叫作载入内存(Load into Memory)。完成这个过程需要一个特殊的程序(软件),这个程序就叫做加载器(Loader)

CPU直接与内存打交道,它会读取内存中的数据进行处理,并将结果保存到内存。如果需要保存到硬盘,才会将内存中的数据复制到硬盘。

例如,打开Word文档,输入一些文字,虽然我们看到的不一样了,但是硬盘中的文档没有改变,新增的文字暂时保存到了内存,Ctrl+S才会保存到硬盘。因为内存断电后会丢失数据,所以如果你编辑完Word文档忘记保存就关机了,那么你将永远无法找回这些内容。

虚拟内存

如果我们运行的程序较多,占用的空间就会超过内存(内存条)容量。例如计算机的内存容量为2G,却运行着10个程序,这10个程序共占用3G的空间,也就意味着需要从硬盘复制 3G 的数据到内存,这显然是不可能的。

操作系统(Operating System,简称 OS)为我们解决了这个问题:当程序运行需要的空间大于内存容量时,会将内存中暂时不用的数据再写回硬盘;需要这些数据时再从硬盘中读取,并将另外一部分不用的数据写入硬盘。这样,硬盘中就会有一部分空间用来存放内存中暂时不用的数据。这一部分空间就叫做虚拟内存(Virtual Memory)

3G - 2G = 1G,上面的情况需要在硬盘上分配 1G 的虚拟内存。

硬盘的读写速度比内存慢很多,反复交换数据会消耗很多时间,所以如果你的内存太小,会严重影响计算机的运行速度,甚至会出现”卡死“现象,即使CPU强劲,也不会有大的改观。如果经济条件允许,建议将内存升级为 4G,在 win7、win8 下运行软件就会比较流畅了。

关于内存的更多知识,大家在学习完《C语言入门教程》后,请继续阅读《C语言和内存》,我敢保证你将会顿悟。

总结:CPU直接从内存中读取数据,处理完成后将结果再写入内存。

图1:CPU、内存、硬盘和主板的关系

3.八进制与十进制

除了二进制,编程中也经常使用八进制和十六进制。

八进制有0~7共8个数字,基数为8,逢八进一,借一当八;十六进制中,用A来表示10,B表示11,C表示12,D表示13,E表示14,F表示15,因此有0~F共16个数字,基数为16,逢16进1,借1当16。例如:

  • 八进制 3072 = 3×83 + 0×82 + 7×81 + 2×80 = 1536 + 0 + 56 + 2 = 1594
  • 十六进制 E3F9 = 14×163 + 3×162 + 15×161 + 9×160 = 57344 + 768 + 240 + 9 = 58361

二进制、八进制、十进制、十六进制的对应关系
十进制 二进制 八进制 十六进制 十进制 二进制 八进制 十六进制
0 0 0 0 10 1010 12 A
1 1 1 1 11 1011 13 B
2 10 2 2 12 1100 14 C
3 11 3 3 13 1101 15 D
4 100 4 4 14 1110 16 E
5 101 5 5 15 1111 17 F
6 110 6 6 16 10000 20 10
7 111 7 7 17 10001 21 11
8 1000 10 8 18 10010 22 12
9 1001 11 9 19 10011 23 13

在C语言中,八进制通常以“0”开头(注意是数字 0,而不是字母 o),例如 0307;十六进制通常以“0x”或“0X”开头(不区分大小写),例如 0xE27 或 0X89F。

下面请看八进制和十六进制加法运算的两个例子。
这是选学内容,如果你只想了解八进制和十六进制,不希望深入研究它们的运算,请忽略这部分内容,不会影响后边的学习。
1) 八进制加法:0107 + 0274 = 0403


图1:八进制加法运算

2) 十六进制加法:0XA2B + 0X276 = 0XCA1


图2:十六进制加法运算
如果你有兴趣了解不同进制之间是如何转换的,请猛击:进制之间的转换


0
0
查看评论

补课

#include     using namespace std;   int main( )   {       do...
  • u012369077
  • u012369077
  • 2013-11-05 16:29
  • 363

程序员补课笔记(8)

今天回到学佼也没有讲课,因为老师忙着一些其它事,听说好像是多媒体比赛的吧,要今天上交了。那我们只好回到课室里自己看书了,不过在这段时间里我们都没有看什么书,只是大家聊了起来。我也插了嘴吹了几句,可是很快就没有心情了,唉!只好睡一睡吧。当我休息了一会发现老师都已经回来了,而且说让我们今天上机房。今天是...
  • cxmdtl
  • cxmdtl
  • 2004-08-24 01:20
  • 562

SQL 补课

判断TableName中是否存在名为ColName的列select name from syscolumns where id = (select id from sysobjects where name=TableName ) and name = ColName;0行 不存在1行 存...
  • liuliu0103
  • liuliu0103
  • 2011-06-08 16:27
  • 209

补课——“内联函数”的理解

1、定义:在类声明的内部声明或定义的成员函数叫做内联(inline)函数。——**我认为这个说法不全面。 内联函数是用在函数的声明或实现前加"Inline"标识来表明该函数在编译的时候可以按内联函数处理。但究竟是否真的按内联函数处理,取决于编译器的处理。因为并不是所有的情况...
  • cos_sin_tan
  • cos_sin_tan
  • 2013-01-05 11:53
  • 321

JAVA基础 补课

JAVA基础 补课 2017-6-30 一、java指令执行过程 javac  ***.java 编译期  出现.class文件 java   运行期  通过JVM执行 /** *在控制台打印Hello World *@author zh...
  • qq_36601750
  • qq_36601750
  • 2017-07-09 22:32
  • 58

3.17数组知识补课

1.定长管理 定义一个二维数组每行放固定长度的字节,删除的话首字节用/0代替,缺点,效率低空间利用率低,不方便管理,每次进行删除或增加操作都要便利数组。 2.变长管理 3.可以定义一个多维数组,例如10000个字符串的增删查改 [0][5][5]hellow [0][2][5]herld [...
  • SilenceCoder
  • SilenceCoder
  • 2014-03-18 01:45
  • 413

关于集群的补课

昨天发了个很什么的随笔,今天把与集群有关的东西搜了搜。整理一下。什么是集群,集群的概念。下面这个BLOG讲的非常清楚:http://blog.csdn.net/ESoftWind/archive/2006/10/19/1341089.aspxweb层次的集群方案讨论,看完javaeye相关的讨论,你...
  • xfans12000
  • xfans12000
  • 2007-03-13 21:50
  • 1069

程序员补课笔记(6)

今天的整个课程只有这么的一道题,但是学到的东西确很多。下面给出这条题目:字符数字转为整数数值(字符可以任意:比如"342A")遇到其它否数字取前数。我所写的程序如下,自认为写得不错:#define N 10;int catio(const char *str) /*const 的...
  • cxmdtl
  • cxmdtl
  • 2004-08-24 01:17
  • 567

程序员考试补课笔记

程序员考试补课笔记huoniaolinx  http://www.cnitexam.com 第一天  今天是第一天补课,终于有又机会可以听到林老师的课了,我觉得他比老潭说得还要好呢,虽然我没有听过老潭的课,不过我相信绝大部份在校的人学C语言都是用老潭的《C程序设计》吧。这本书的好...
  • bhwshx
  • bhwshx
  • 2009-02-17 13:19
  • 956

程序员补课笔记(20)

今天又给讲了一道题,而且这道题就是上次我说过的那个同色珠子用双向链表存储的问题。所以可以再次看出我们程序员考试的题大都离不开链表和指针,这里指针当然就是最重要的了,因为链表也是指针构成的啊,一定要对指针熟悉才可以。下面请大家看题: 阅读下列程序说明和C代码,将应填入__(n)__处的字句写在答题纸的...
  • cxmdtl
  • cxmdtl
  • 2004-08-24 01:30
  • 704
    个人资料
    • 访问:878次
    • 积分:67
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:2篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档
    最新评论