前言
今年考研结束,选择的导师是一个搞嵌入式的博导,今后就要投入嵌入式这个大方向的怀抱了。本人本科专业自动化,虽然和嵌入式联系紧密,但那四年算是荒废了。本科毕业后工作的一年,经过了一些挫败,终于想清楚了自己后面的路该怎么走。为了后面的动力更足,选择定期更新博客的方式来记录自己这段时间的奋斗,期待三年后的自己蜕变成这方面的大神。在研究生入学前这段时间,准备将本科学的一些课程“复习”一遍,并将博客作为读书笔记。这段时间复习顺序是:微机原理——C语言——51单片机。
本文作为该系列的第一篇主要讲计算机中信息的表达、记录方式。
计算机中的数制和码制
数是客观事物的量在人们头脑中的反映,精确表达了事物的量的范围、幅度和限度(刚考完研,这是马原后遗症,哈哈)。数是一个很奇妙的发明,它的出现方便了人们日常生活中的管理和分配工作。而码制又是数的一种表达式,例如二进制、三进制等等,甚至可以自己定位一些别的规则(当然只在自己那管用)。
在计算机中常用的有二进制、八进制、十六进制和十进制,后缀分别为:B、Q、H和D(或者省略)。下面是这些进制转换方法的总结和举例:
1、任意进制转十进制
各个位上的数乘以相应的权重累加即为十进制数。
2、二进制、八进制和十六进制之间转换
一位八进制数相当于三位二进制数、十六进制数相当于4为。例如:1100111010110B=14726Q=19D6H。
3、十进制转二进制
整数采用“除2取余”,小数采用“乘2取整”。
计算机中的码制有原码、反码、补码和偏移码,其中原码和反码比较简单就不讲了。补码计算原则是:正数补码与原码相同、负数求补码时原码符号位不变,其余各位按位取反,然后加一。偏移码主要用于模数转换,先不讲。
在计算机中因为CPU的位数一般是确定的,例如8086就是16位处理器。所以CPU的一次计算也是有限度的。当两个带符号位的二进制数进行补码运算时,其结果如果超过了CPU的位数就会出错,计算机采用双高位判别法来判断溢出。
在计算机中小数有两种表示方法:定点表示法和浮点表示法。前者小数点在数中的位置固定不变。这种方法实现起来较为简单、直观,但是局限性较大、精度不高,一般在一些仪表上用的比较多。后者就是初中学的科学计数法,运算精度很高,数值范围大,计算机中一般采用这种方式表示小数,所以小数又叫浮点数。
上面讲到的都是数在计算机中的表达,其实我们在计算机中接触的东西远不止数,更多的是文字、图片和视频。这些东西都可以用数字按照特定的编码方式来表示。例如文字符号常用的ASII码、汉字有GB232,一张图片如果用Matlab打开的话会发现全是数字矩阵。所以我们可以总结所有信息在计算机中逻辑上都是0和1,物理上都是电平的高和低。