C语言学习笔记整理<一>

        在参加TI杯后,就一直在想着之前总是在这里看资料,但是没有发布过自己的文章。我觉得我应该将自己的一些想法和一些学习笔记发布在这里。

        在学校里面总觉得没有时间去干这些事,在大一学完C语言和数据结构后没有及时的去找比赛打,后面又去学别的课程,所以又是一年没有碰过编程,现在早就是忘得差不多了。趁着刚参加完电赛,把一些之前学过的知识温习一遍,把现在正在学习的东西巩固一下,同时也是对自己的一种敦促。出于以上目的,开始自己的第一篇文章,希望以后可以一直坚持下去。

一>程序设计语言

机器语言

       机器是由电流驱动的,但是为什么只高和低电平呢。

       这是 冯诺.依曼结构计算机。

可见该结构是以存储器为中心的,其实之前是以运算器为核心的,但是这样一来,只能适用一些数据量不大的计算中,后来便以存储器为核心。存储器我这里就只简单聊聊,后面再仔细聊它。逻辑门可以组成电平触发的触发器,这种触发器是可以暂时存储数据的(寄存器),这样一来,你可能知道存储器是咋一回事了。而这些逻辑门又是由三极管和二极管组成(正是这个原因,可以将大量的逻辑门集成在一块),而二极管具有单向导电性,故而电压自然而然就只有高低这种离散的划分了。同时也可以通过这些逻辑门实现时序逻辑电路来实现运算,所以当想要计算机执行代码时,给相关的硬件分配高低电平即可。同时开关只有开和关两种状态,所以输入要被处理的数据也只有两种状态。所以综上所述,指令和数据都可以用0和1来表示。但是这种的弊端在于你得熟悉硬件,否则不好传达你的指令给机器。而编程的本质就是寄存器(个人观点)之间的数据交换,这就意味着你得熟悉你的CPU(寄存器在里面)。这种情况下,换一种CPU就得重新学,这是相当麻烦的。而且面对一堆只有0和1的数字也不好理解。

汇编语言

只有0和1 通用性较差,但是有一些指令是固定的,哪怕换了CPU也逃避不了,比如说加法运算。如果把这些指令用英文单词取代,可读性就会好很多。

#01:MOV R0,#1
#02:MOV R1,#2
#03:ADD R0,R0,R1

 虽然说,可读性已经很好了,但是和人类语言还是有一些差距。

高级语言

与自然语言相近,规则明确且与要使用的CPU种类无关的语言便是高级语言。如C语言。

总结

它们三者之前并不是一个淘汰的过程,机器只能识别机器语言。所以三者关系是这样的:

高级语言   \rightarrow编译器  \rightarrow汇编语言\rightarrow汇编器\rightarrow机器语言

二>数值编码

美国信息交换标准代码(ASCII)

使用7位二进制数来表示所有大写和小写字母,数字0~9,标点和一些特殊字符。

数的机器码 

1.原码(由于机器识别二进制数,所以是二进制码)

符号+绝对值,符号:0表示正数,1表示负数。如十进制正数99,符号位0,99=x(1)*2^n+x(2)*2(n-1)+......+x(n+1)

99=2*{x(1)+x(2)*2(n)+......+x(n)}+x(n+1),所以x(n+1)为99/2的余数,根据这种办法,可以化的99的二进制绝对值为11100011,所以正数99二进制原码为011100011。

2.反码

正数的反码和正数的原码相同,负数的符号位不变,数值位求反,如111100011,反码是100011100,这种做法的目的是便于求负数补码。

3.补码

正数的补码和正数的原码相同,负数的符号位不变,数值位求反,在最低位加1。为什么会这么做呢?

我们知道在位数一定时。当数值一直加会出现溢出,然后再从0 开始。利用这一特点实现机器码的减法变加法。时钟是一个好的例子,毕竟也可以溢出。比如说7-5,用加法怎么来算呢?7-5=2,即使得7在达到12时溢出后再走两格即可。这时在满12 从0 开始的情况下,7-5=7+7=2。再看看有什么特点在这一过程里,7和5相加刚好是12,也就是达到溢出的时候。再来看补码的用法是不是也一样呢。当负数的反码求出后和之前的原码数值位相加刚好差一个1就刚好溢出,所以要加一。

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值