补码的运算与比较----c语言中若 int x,y 若 x>y,则-x<-y是对还是错?

14 篇文章 1 订阅

这种问题,我个人会在整数表示、两个数比较时应该用哪种量纲去比较,这两个方面纠结一下,下面来逐一解答:

1.整数表示:既然是int,那么取负数后还是int,其实就是补码取负后,还用补码表示

2.量纲:还是根据int的补码规则去解析这个补码

好像也说不太清楚,其实x到-x就是进行正常的补码运算,如果越界了就把溢出的那部分直接截掉;而-x和-y进行比较,就是把这个补码解析成十进制整数



回到文章标题,c语言中若 int x,y 若 x>y,则-x<-y是对还是错?
取y=-231,则y=10…0(2),一共31个0,则-y还是10…0(2),一共31个0,所以-y还是最小的整数


对16位有符号整数来说,进行如下运算:

1)y=-32768,y-1=?
2)y=32767,y+1=?
解析:
1)
y=1000 000 0000 0000,
y-1=1000 0000 0000 0000+1111 1111 1111 1111=1 0111 1111 1111 1111,最高位溢出了个1,去掉,
所以y-1=0111 1111 1111 1111=32767,
最小的整数减一后变成了最大的整数

2)y= 0111 1111 1111 1111,
y+1=1000 0000 0000 0000=-32768,
最大的整数加一后变成了最小的整数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值