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

负数的二进制表示法

时间:2014-08-26 15:04:56      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:blog   http   ar   html   log   sp   htm   ef   c   

负数的二进制表示法

 

先了解几个概念

 

【1】原码:

·正数的原码,按照绝对值转换成二进制

·负数的原码,按照绝对值转换成二进制,最高位补1(有符号的整形最高位用来表示正\负,0为正数,1为负)

 

示例:

整数5的原码

00000000 00000000 00000000 00000101

 

整数-5的原码

10000000 00000000 00000000 00000101

 

【2】反码:

·正数的反码,与原码相同

·负数的反码,符号位不变,其余为取反

 

示例:

整数5的原码与反码表示

原码:00000000 00000000 00000000 00000101

反码:00000000 00000000 00000000 00000101

 

整数-5的原码与反码表示

原码:10000000 00000000 00000000 00000101

反码:11111111 11111111 11111111 11111010

 

【3】补码

·正数的补码,与原码相同

·负数的补码,符号位不变,其余为取反,最低位+1

 

示例:

整数5的原码反码与补码表示

原码:00000000 00000000 00000000 00000101

反码:00000000 00000000 00000000 00000101

补码:00000000 00000000 00000000 00000101

 

整数-5的原码、反码与补码表示

原码:10000000 00000000 00000000 00000101

反码:11111111 11111111 11111111 11111010

补码:11111111 11111111 11111111 11111011

 

【4】特殊

为简单起见以长度为1byte的char举例

-128表示为

1000 0000,那么,它的原码是什么呢?从补码求原码的方法跟原码求补码是一样的。先保留符号位其它求反:  1111 1111, 再加1,11000 0000, 超过了8位了。对,用8位数的原码在这里已经无法表示了。

 

那么,回到原码处, 它的原码也是 1000 0000(超出的自动丢失),1000 0000 在原码表示什么呢? -0, 但补码却规定0没有正负之分。

转换一下思路,看看计算机里,是怎么运算的:

对于负数,先取绝对值,然后求反,加一

-128 -> 128 -> 1000 0000 -> 0111 1111 -> 1000 0000

现在明确了吧

所以, 8位有符号的整数取值范围的补码表示

1000 0000 到 0000 0000, 再到 0111 1111

即 -128 到 0, 再到 127

最终 -128 ~ +127

 

 

 

转自:http://blog.sina.com.cn/s/blog_56d8ea900100y65b.html

负数的二进制表示法

标签:blog   http   ar   html   log   sp   htm   ef   c   

原文地址:http://www.cnblogs.com/dev-dxy/p/3937062.html

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