有符号数与补码

对于unsigned int,其数据范围为[0,2^32 - 1]。

补码和原码都是对于有符号数而言的。
对于int,
[0,2^31 - 1]为正数,
[-2^31,-1]为负数。

对于负数-x来说,补码表示实际上为2^n - x,其中n为该数的位数,则-x与x相加刚好为0。
那么我们注意到,对于x∈[0,2^31 - 1],32位表示,则最大的数2^31 - 1,其最高位为0(小于该数的也是如此),其余位为1,故最高位为0,则判断为正数。
对于[-231,-1],32位表示,则最大的数-1,补码表示为232 - 1,最高位为1(小于该数的也是如此),故最高位为1,判断为负数。

(补码计算公式:正数补码=原码,负数补码=原码取反+1)

eg:
unsigned a = -1; //0xffffffff
cout<<hex<<a<<endl; //输出0xffffffff

int b = -1; //0xffffffff
cout<<b<<endl; //输出-1

参考:https://www.cnblogs.com/liu-runda/p/9789522.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值