数字在单片机中的二进制表示形式称为机器数。一个完整的机器数应能表示无符号数和符号数。若一个长度为n位的机器数表示无符号数,其n位全部用于表示数值。如果表示符号数,最高位用于表示数的符号(0表示正数,1表示负数),其余的n-1位用于表示数值。无论是无符号数还是符号数,都是计算机能够直接处理的数据。在计算机系统中,对于符号数有不同的编码方式,常用的编码形式有原码、反码和补码。
1.原码
最高位为符号位(正数用0表示,负数用1表示),其他位为数值位,这就是符号数的原码表示。例如:
2.反码
正数的反码与原码相同,即符号位用0表示,数值位不变;负数的反码是其对应的原码符号位保持为1,数值位逐位取反的结果。例如:
3.补码
正数的补码与原码相同,即符号位用0表示,数值位不变;负数的补码是其对应的原码符号位保持为1,数值位逐位取反,末位加1的结果,即对应的反码加1。例如:
此外,也可以采用直接从负数的原码求取补码的简便方法,即从负数原码的最低位开始找第一个出现的“1”,将第一个“1”和符号位“1”之间的数按位取反,结果就是补码。
从上面的讨论可知,正数的原码、反码和补码是一样的,都是正数,即最高位都是“0”。负数的原码、反码和补码则各不相同,但都是负数,即最高位都是“1”。负数的补码可根据定义求得,即反码加1,也可以采用简便的方法求取。(www.xing528.com)
4.补码数的范围
一个n位二进制补码数的表示范围为-2n-1≤N≤2n-1。
n=8时,数的表示范围为-128≤N≤127。
n=16时,数的表示范围为-32768≤N≤32767。
如果两个8位二进制补码数的运算结果超过[-128,127],或者两个16位二进制补码数的运算结果超过[-32768,32767],则称为运算结果溢出。
数据采用补码表示以后,就可以将减法运算转换为加法运算。例如,计算123-84时,可以将其转换为123+(-84)=[123]补+[-84]补,以补码的形式进行求和计算,其结果和减法一样。同样也可将乘法运算转换为加法运算,将除法运算转换为减法运算,因此单片机的CPU硬件上没有设计减法器、乘法器和除法器就是这个道理。
实现一个复杂的单片机系统设计是一个综合工程,需要经过功能分析论证、电路设计、软件设计、组装调试等环节。在学习单片机之初,没有必要对每一个系统都要完整地实现。简单的单片机系统设计可以先在原理图的基础上进行仿真,即通过程序在仿真软件中的仿真运行,实现对电路与程序设计的功能验证。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。