学c从认识计算机的数据表示开始
对于C语言的学习,从大学就有学它,工作之余也时不时的在学习C,虽说本人的工作基本不是用C【当然是间段式的学习,一直在学,可一直没学通】,但是很多人都在说:只有搞C的人那才叫做真正意义上的编程,而且都认为搞C的都是一帮牛人,且它是快速学习好其它语言的基础,对于想在软件领域长久经营下去,是必须懂的一门语言。受此思想,所以不干落后的我当然也不能放弃这门重要的语言喽,还有一个主要原因是自己的工作方向是往嵌入式发展,所以学好C是当务之急。对于C语言,应该说里面的很多知识都有学过,但是总感觉还是不怎么会C,主要原因是平常自己练手的机会很少,因为工作暂时用不上它;另外自己没有去总结,只是照着书本看了一遍,所以,痛下决定从头开始再次学它,且通过博文的方式来让自己沉淀一些东西,不至于学完忘了而不能快速地回忆,另外对于IT技术的学习,我觉得很重要的一点就是:”学习不在于快,而在于学过之后得真正掌握它才行,哪怕一个别人认为很简单的知识点花一两天时间去吃透它,也比你花一小时简略带过要强,实际上最终你会发现学习时间是长了,但是最终还是为你节省了大量宝贵的时间,因为你不用过了很长时间又得回头再学已学过的东西。“,在这个浮燥的社会确实很难让自己慢下来,欲速则不达,人人皆知的道理,但要真正做还是得要有恒心的,好了,费话不多说,正入C语言之旅!
这次学习的不算是C语言的正式开始,因为不会有编码,应该说是学好C的一个很重要的知识点,提前透露下一篇的内容:数据类型,而数据类型是每个语言都会有的,通常在学习它时都会看到不同数据类型的表示范围,要轻松理解它们,学习今天的几个概念就尤为重要了,具体概念如下:
字长:
字长是CPU的主要技术指标之一,指的是CPU一次最大能并行处理的二进制位数。
现在主流的计算机字长是32位与64位。
我们平常可能会接触到word是16位,dword是32,这里的word与字长不是同一个概念,这里表示一个数据类型,而非CPU的最大二进制位。
原码、反码、补码:【这个很重要!!】
先贴出来相关的解释:
- 为了表示负数,将最高位解释为符号位
- 正数的原码、反码、补码均相同
- 对于负数,已知原码求反码,符号位不变,其它位按位求反
- 对于负数,已知原码求补码,先求反码,再在反码末位加1
对于这三者的概念,先直接通过求一个数的原码、反码、补码来阐述其含义,这里面有一个推导过程,仔细瞧着!
注意:学习它们,需在二进制表示下进行。
求10、-10这两个数的三码【这里用这个词来表示原码、反码、补码,偷下懒】:
假设计算机的字长【也就是开头所讲的,代表一个数的二进制的最大位数为8】为8
①、10用二进制表示为:00001010
由于“正数的原码、反码、补码均相同”,所以三码的值就不用多说了!
②、-10的三码稍复杂一点,如下:
另外需要明白一点:
"在计算机系统中,数值一律用补码来表示(存储)。主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理,这样就大大减化了cpu的设计,不用去设计减法器了,只需提供加法器既可,这就是为什么要用补码来表示数值了。 "
对于这三码之间的内在关系,下面对其进行进一步探讨,这样就会对其了解更加深刻:
所以,通过上面这个推导过程图就进一步论证了:
补码 = 反码 + 1;
这个推导过程实际上还有另外一个重要的好处:就是我们很容易以计算机的方式(也就是补码的方式)来算出值来,特别是负数
比如:
10000000这个值,在计算机中是多少呢?
在不知道上面推导过程的情况下,你想算出这个数,还得换算成原码,再得出值,而在知道了公式的情况下,你一下就能看出它是-128,还是根据上图的推导得出来的:
补码100000000 = -128 + 0 = -128
好了,今天学习的知识点不多,但是概念很重要,其推导过程还是挺复杂的,需好好消化,下节数据类型见!