51单片机的有符号数和无符号数运算

内容:讲解有符号数运算和无符号数运算的区别

在51单片机中,所有的实数都是以补码的形式存在于内存中的。而各种算术运算也都是以补码的方式进行的。至于算出来的结果是正是负,完全在于你如何去看这个数。这里举三个例子来说明。

例1:计算100+10。

100的补码形式是0110 0100,10的补码形式是0000 1010。上面说了算术运算是以补码形式进行,所以结果是0110 1110。这时你把结果看成是有符号数还是无符号数,真值都是110。

例2:计算120+10。

120补码形式是0111 1000,10的补码形式是0000 1010,相加的结果为补码形式的1000 0010。如果把它看成无符号数,那么真值就是130。如果看成有符号数,则将补码转换成原码为1111 1110,真值就是-126。所以计算机做加法算出来的结果就是一个补码,它的真值为多少完全在于你如何看这个数。如果这题是无符号数运算,那么结果130符合预期;但如果这题是有符号运算,由于真值130超过了8位二进制数所能表示的范围,所以算出来的真值是一个负数。

前面知道了当进行120+10的有符号加法运算时,算出来的结果是-126。在程序设计中,正数加正数等于负数通常是一个非预期的结果,所以进行有符号数运算时需要通过判断OV标志位来判断是否有溢出,以便知道结果是否符合自己的预期。

例3:计算0E2H+52H。

传给单片机的立即数都是补码的形式,所以0E2H的补码加上52H的补码等于0011 0100,也就是如下图所示的0x34。此外,该加法有进位溢出,即Cy=1。

如果看成有符号数加法,则0E2H真值为-30,52H真值为82。0x34真值为52。82-30=52,所以结果符合预期。如果看成无符号数加法,则0E2H真值为226,52H和0x34真值同上。82+226=52,很明显因为进位溢出而导致运算结果不符合预期。所以,进行无符号数运算时要通过判断Cy标志位来判断是否溢出。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值