这种问题,我个人会在整数表示、两个数比较时应该用哪种量纲去比较,这两个方面纠结一下,下面来逐一解答:
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,
最大的整数加一后变成了最小的整数