无符号数运算相减/有符号数表示运算问题(一)

在这里插入图片描述
参考链接:https://blog.csdn.net/qq_38608897/article/details/103966054?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0.no_search_link&spm=1001.2101.3001.4242
一、无符号数
无符号数二进制的乘除,就相当于左移或者右移了 2的几次方倍(如下图)
在这里插入图片描述
在这里插入图片描述
无符号数加法是进位,减法是借位;(进/借最高位)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
例如:
1的补码是 0000 0001
2的补码是 0000 0010
-2的补码是1111 1110
那么1-2=1+(-2)= -1(负数)
0000 0001 + 1111 1110 = 1111 1111(255即为计算机的真实值)
【注意】无符号数小数减大数,结果出现负数,但是无符号数本身取值范围是≥0的,所以只能是其补码运算结果输出值为真值。
其中小数减大数,可以化作小数加负数,还是按照有符号数先转换成补码进行运算;
TRUE】无符号数小数减大数(正常逻辑结果是负数),先转换成各自补码,其补码运算结果即为无符号相减运算的真值
二、有符号数
有符号数运算才涉及原码、反码、补码
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
【注意】0的原码、反码表示不唯一才引入的补码进行运算;
TRUE】计算机的有符号数运算过程就是将参加运算的二进制数转换成其对应的补码,然后用其对应补码进行运算,其中用补码计算得出的运算结果如果是正数即为真值,如果是负数,则需将其补码运算结果作为原码对其再求补码得出即为真值

例1:
1的补码是 0000 0001
2的补码是 0000 0010
-2的补码是1111 1110
那么1-2=1+(-2)= -1(负数)
0000 0001 + 1111 1110 = 1111 1111
而-1的补码是 1111 1111(再对1111 1111求其补码得出:1000 0001(真值));
1+1=2(正数)
1的补码0000 0001 + 0000 0001 = 0000 0010;

例2:
-52 + 116 = 64
-52的补码是1100 1100
116的补码是0111 0100
得出补码运算结果是:1 0100 0000(最高位溢出)
也就是0100 0000(正数即为真值:64);

参考:
https://blog.csdn.net/qq_34888036/article/details/80870936
https://blog.csdn.net/ziqi5543/article/details/108199896
【TRUE】无符号类型/有符号类型变量内存空间存放的都是补码,但是无符号类型输出的时候直接拿补码作为显示,而有符号数是按照求真值的方式(补码转换为原码)再进行显示;
在这里插入图片描述
在这里插入图片描述

【TRUE】实践证明可见,在32位MCU中,变量a和b定义的类型(位数u8、u16、u32)不一样结果也会不同。在实际做减法判断时最好将其赋值给变量c,然后再做判断,防止出现异常。在一些SDK中已经发现类似错误,在这提醒大家要格外注意。

  • 10
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SUR0608

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值