有符号与无符号数之间运算

        先了解源码,反码,补码 的概念

  1. 补码定义:

    • 对于一个固定的位数 n,最高位(最左边的位)被称为符号位,用来表示正负数。
    • 对于正数,其补码等于其本身的二进制表示
    • 对于负数,其补码等于其二进制表示的反码加 1

        2. 反码 : 源码的符号位不变,其余取反。

如果一个操作数是有符号数,而另一个操作数是无符号数,则有符号数会被隐式转换为无符号数,然后进行相加。

unsigned int a = 5;
int b = -10;
unsigned int result = a + b;  // 结果为 4294967291,b 隐式转换为无符号整数进行计算

-10 的源码为  1000 0000 0000 0000 0000 0000 0000 1010     阴影部分为符号位

-10 的反码为  1111 1111 1111 1111 1111 1111 1111 0101           符号位不变,其余取反

-10 的补码为   1111 1111 1111 1111 1111 1111 1111 01110         补码 = 反码 + 1

-10 被转换为无符号整数后的值为 4294967285。

需要注意的是,有符号数和无符号数相加的结果可能会导致溢出,例如当被转换的有符号数的值为负数并且绝对值大于无符号整数的最大值时。在这种情况下,结果将超过无符号整数的范围。因此,在进行这样的计算时,确保了解并适当处理溢出的情况是很重要的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值