C语言的简单介绍

1.如何与计算机进行沟通

        就像我们和歪果仁说话一样,和英国人讲英语,和德国人讲德语,和法国人讲法语...

  那么和计算机交流我们就需要讲机械语言,

        机械语言是什么?

        维基百科说:机械语言是用二进制代码表示的计算机能够直接识别和执行的一种机器指令的集合。他是设计者通过计算机硬件结构赋予计算机的操作功能。

        我们从中可以get到  1.机械语言是计算机能够直接看懂的

                                          2.机械语言是由二进制代码组成的  比如:01010101

                                          3.他与计算机硬件结构关系密切(意为着不同硬件结构的计算机语言是不一样的 即使他们都使用010101代码来表达意图,就像印度人的摇头是yes,点头是no,而我们却相反)


        样子:

        指令部分的示例

        0000 代表 加载(LOAD)       

        0001 代表 存储(STORE)


        寄存器部分的示例

        0000 代表寄存器 A

        0001 代表寄存器 B

        存储器部分的示例

        000000000000 代表地址为 0 的存储器

        000000000001 代表地址为 1 的存储器

        000000010000 代表地址为 16 的存储器

        100000000000 代表地址为 2^11 的存储器


        集成示例

        0000  ,      0000      ,  000000010000 代表 LOAD A, 16

        加载        寄存器A              16

        0000,0001,000000000001 代表 LOAD B, 1

        0001,0001,000000010000 代表 STORE B, 16

        0001,0001,000000000001 代表 STORE B, 1


        确实难以阅读与理解  我们的先辈就是用这些 0101告诉计算机需要干什么.....

      补充知识: 000000010000 为什么是16?

      二进制转10进制      0      0    0    0    0    0        0                  1                0                0                  0              0

                                                                      .....      0*2^5  +    1*2^4    +    0*2^3  +    0*2^2  +    0*2^1  +  0*2^0    = 16

      16如何变成10000呢? 不断求余


                                    16/2 = 8.....0            8/2 = 4.....0      4/2 = 2....0      2/2 = 1.....0    1/2=0.....1

        从最后一位开始组合  10000  就表示十进制的16

        大小 位(bit) 最小的数据存储单位  表示一个 二进制 0 或者 1 占据的空间

        字节 (Byte)  1个字节是8位    一般使用字节作为计算算计的通用计算单位                 


        32位cpu  指cup一次可以读入处理 32位的二进制数据

2.机械语言的抽象(按照c的数据结构来  对于一个8位整数来说)

    设想如果我们使用 0000,0001,000000000001 一句机械代码看起来也没有那么难,但是如果我们想要用这样的代码写一个简单的1+1     

  0000  0001

+ 0000  0001

= 0000  0010

什么感觉 这还没有添加前面的  加载命令符    寄存器命令符....

为了简化计算器的程序设计  程序设计者 将最高位的bit 视为正负值标识位

0为整数  1为负数      0000,0001 = 1                  1000,0001 = -1(是这样吗?)

因为最上位挪去表示正负号了,所以8位有符号整数的表示范围是“-128~127”,共256个数(因为0只有一个而且算正数,所以负数比正数多一个)

那么 减法这么算对吗    1-1=0

  0000,0001

+ 1000,0001

= 1000,0010 = -2  很明显直接相加是不对的

-1到底如何表示  补码的出现

0000,0001 为1  -1是 0000,0001的补码

计算 将 0000,0001  0 1翻转 ---> 1111,1110

在加上1            1111,1110+1 = 1111,1111 这就是-1

    0000,0001

+  1111,1111

=  10000,0000  ---->因为是8位 相加后为9位 最高位将被计算机吞掉 值为

      0000 0000

乘除法 具体看下知乎大神的解释  https://www.zhihu.com/question/37319895

其实跑题了

0101直接与计算机打交道没问题 但是很累 代码不易阅读 难以理解...

于是就有人想能不能在把0101的指令进行简化 方便大家使用 于是出现了汇编语言(低级编程语言)


我们可以看到 代码不在是单纯的 0101 而是出现了 人类看的懂的英文...进步啦

但是依然不是那么好理解

于是有人想 能不能把 汇编语言在抽象一点,更加类似人类认知的语言与规范,于是出现了C、C++、C#、pascal、VB、java等高级编程语言

我们来看下 c的编码风格

main(){ 

  int k = 1+11; 

  printf(“hello world”);

}

和0101 相比 以及和汇编语言相比 什么感觉

我们似乎在用十进制 进行k值的计算 在用我们自己的语言让计算机进行打印

printf 打印  print--->打印 输出  main 主要    1+11 十进制相加  k=12

hello world

没错 也许你从来没学过c 但似乎也能看明白 这些代码 至少1+11  print  hello world

打印 hello world  没有任何问题....

这就是进步 高级语言越来越接近人类的自身的语言习惯以及数据的运算方式,提高的代码的可读性与理解性  代码不在那么晦涩

3.编译器(翻译官)

问题来了 我们在代码里面使用 10进制加减乘除 以及人类的语言各种英文  计算机是如何看懂的 前面说过他只认识0101  难道计算机进化啦?

完全没有--->计算机还是只认识0101  但是我们创造了编译器 让他把我们用的高级语言转化为 机械语言 与 计算机进行交互

就像我只会说中文,想要和日本人交流....困难重重 立刻去学习日语 没有个把月是搞不定的,,, 我朋友是个日语学习者 他懂中文又懂日文,我通过朋友和日本人交流,没有任何问题

事情变的极为简单 只要朋友在就好 我只要和朋友交流就好,编译器相当于这样的朋友

维基百科对编译器的解释:编译器是一种计算机程序,它会将用某种编程语言写成的源代码(比如c/c++等),转换成另一种编程语言(目标语言 比如 机械语言)

编译器怎么做到的?

所有的语言都有规范 对于编写程序的语言更是如此,而且很严格,这就意味着编译器制作者可以将高级编程语言 与 机械编程语言对应起来,就像中文的 香蕉-->banana,

编译器就像一个大的翻译器 将c这样的高级语言翻译成 机械语言 现在编译器的基本运行流程

"源代码"-->"预处理器"-->"编译器"-->汇编程序"-->"目标代码"-->链接器”-->"可执行文件" 最后打包好的文件就可以给计算机去判读运行了

有了前人的努力,我们学习与编写程序的成本越来越低了,我们不用在面对0101 或者 汇编语言的晦涩,只需要学习我们感兴趣的高级编程语言,在使用时安装不同语言的编译器即可

4.c语言(高级语言)

c语言在目前名目繁多的编程语言中算的上老爷车,最早是由[丹尼斯·里奇]为了 在PDP-11计算机上运行Unix系统而设计出来的编程语言  属于操作系统语言

1973年 [史蒂芬·强生] 实现了一套 可移植编译器 这套编译器修改起来相对容易,可以再不同的机器上面生成代码,从此c语言就开始被使用在大多数机器上面,得到了快速的发展

那么在这个编程语言满天飞的年代 c语言还有自身的优势吗?当然有 c语言的运行速度极快 因为他更接近机械语言,同时漫长的发展为c语言积累的丰富的类库,后来人使用很方便,至今为止涉及到代码运行速度与安全性时 c语言都是不二选择

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 225,132评论 6 523
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,457评论 3 404
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,411评论 0 368
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,147评论 1 301
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,145评论 6 400
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,611评论 1 315
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,962评论 3 429
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,948评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,479评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,514评论 3 347
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,640评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,228评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,973评论 3 340
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,402评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,551评论 1 277
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,210评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,714评论 2 366

推荐阅读更多精彩内容