signed

二进制值(1字节) 十进制值
1000 0000 -128
1000 0001 -127
1000 0010 -126
1000 0011 -125
... ...
1111 1110 -2
1111 1111 -1
首先我们看到,从-1到-128,其二进制的最高位都是1(表中标为红色),正如我们前面的学。
然后我们有些奇怪地发现,1000 0000 并没有拿来表示 -0;而1000 0001也不是拿来直观地表示-1。事实上,-1 用1111 1111来表示。
怎么理解这个问题呢?先得问一句是-1大还是-128大?
当然是 -1 大。-1是最大的负整数。以此对应,计算机中无论是字符类型,或者是整数类型,也无论这个整数是几个字节。它都用全1来表示 -1。比如一个字节的数值中:1111 1111表示-1,那么,1111 1111 - 1 是什么呢?和现实中的计算结果完全一致。1111 1111 - 1 = 1111 1110,而1111 1110就是-2。这样一直减下去,当减到只剩最高位用于表示符号的1以外,其它低位全为0时,就是最小的负值了,在一字节中,最小的负值是1000 0000,也就是-128。
我们以-1为例,来看看不同字节数的整数中,如何表达-1这个数:
字节数 二进制值 十进制值
单字节数 1111 1111 -1
双字节数 1111 1111 1111 1111 -1

四字节数 1111 1111 1111 1111 1111 1111 1111 1111 -1

//

在计算机中,负数以其正值的补码形式表达

什么叫补码呢?这得从原码,反码说起。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
比如 00000000 00000000 00000000 00000101 是 5的 原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。
取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)
比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。
称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。
反码是相互的,所以也可称:
11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。
补码:反码加1称为补码。
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。
那么,补码为:
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011
所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。
//
.补码
1)补码的引进和定义
    据统计,在所有的运算中,加、减运算要占到80%以上,因此,能否方便地进行正、负数加、减运算,直接关系到计算机的运行效率。
把一个负数加模的结果称为该负数的补码(结果是一个正数,它和该负数是等价的,确切地说,是一对一的,因而可看作是该负数的编码),定义正数的补码就是它本身,符号位取0,即和原码相同。这就是补码的通俗定义。将这个定义用数学形式表示出来,就可得到补码的正规定义:
其中n为补码的位数。这个定义实际也将真值的范围给出来了,当n=8时,一27≤x<27。和原码相比,补码表示可多表示一个数。当n=8时,多表示的数是一27=一128。
  2)补码的求法
  对正数,补码同原码。
            例如,x=+0101001,[x]补=[x]原=00101001。
  对负数,由定义求补码,需做减法,不方便。经推导可知,负数的补码等于其原码除符号位外按位“求反”(1变0,0变1),末位再加1。
            例如,y=一0001100,[y]原=10001100,[Y]补=11110011+1=11110100。
•算法:1.正数的补码与原码相同; 2.负数的补码由原码除符号位保持不变外,其余各位按位取反,再在末位加1。   [x]补=[x]反+1 •

refer to
http://www.cnblogs.com/betterfar/archive/2008/09/20/1294670.html


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值