码迷,mamicode.com
首页 > 其他好文 > 详细

abs(INT_MIN) = ?

时间:2020-04-03 12:09:24      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:本质   https   com   资料   负数   参考资料   一个   -128   min   

abs(INT_MIN) = INT_MIN

为什么?

因为INT_MIN = 1000 0000B

对INT_MIN取反再加一仍然是1000 0000B

 

(1)为什么求一个数的负数是取反再加一?

8 = 0000 1000B

-8 = 0 - 8 = 0000 0000B - 0000 1000B

因为减法有借位性质,所以上式等同于:

1 0000 0000B - 0000 1000B = 1111 1000B

又因为1 0000 0000B = 1111 1111B + 0000 0001B

所以1 0000 0000B - 0000 1000B = 1111 1111B - 0000 1000B + 0000 0001B

而被1111 1111B减等同于求反

所以求一个数的负数等同于求反再加一

 

(2)补码的本质数互为补数

假设模为100, a+b = 100,则a和b互为补数

二进制中,对于8位数,1 0000 0000B可以看作他们的模,这样1111 1111 和 0000 0001互为补数,人们约定前者代表-1后者代表1

就像模为100时,50的补数是他自己,只有一种表示,只能代表一个数字

模为1 0000 0000B时,1000 0000B也和自己互补,按照之前的约定,最大的正数是0111 1111B = 127,-127 = 1000 0001B

所以1000 0000B就被约定为-128

 

(3)为什么不把1000 000B约定为128

1000 000B+000 0001B = 1000 0001B = -128 + 1 = -127

刚好符合之前的约定,如果是128则式子代表128 + 1 = -127,这样的式子不合理

 

参考资料:

https://www.douban.com/note/223507364/

abs(INT_MIN) = ?

标签:本质   https   com   资料   负数   参考资料   一个   -128   min   

原文地址:https://www.cnblogs.com/N3ptuner/p/12625382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!