补码是什么东东?(整型数据类型)

    声明: 本文档只解释补码的位级的实现原理,具体的实用方法各位朋友可以直接百度找关键字补码即可.
 

      片外话:计算机对整型数据的编码形式有很多种,不同的机器(编译器)会有不同的编码方式.例如补码,反码,源码.


       补码( two's complement): 现在大多数计算机使用的编码方式.
            首先引出来一个问题:定义一个char类型的数据。也就是开辟了一个字节的形式。它的取值范围是-128—127,为什么负数的范围会比正数的范围大呢?
                                                   由于最高有效位是符号位 ,那么127的二进制形式是 0111 1111  
                                                                                                           -128的二进制形式是:1000 0000  还是1111 1111呢?
             解答:
                        上面所指的都是有符号的整数数据类型,也就是存在正负的概念的。
                        大家也应该知道二进制怎么转换成十进制的形式,每一位上的值乘以相对应的权值。
                        补码的位级别的形式就是根据每一位的权值来定义的。无论是正数还是负数,只要是有符号的数并且机器是用补码的形式来编译程序的。
                        在使用补码时,最高有效位的值扮演者表现符号和确切数值的角色。
                        无论是正数还是负数的, 最高有效位的权值变为了负的。 负的  这就是关键!!!! 
                        例如: 
                               一个正整数   2 :补码是0000 0010  (计算机中的存储形式)
                                                             变成十进制是0*(-2^7)+ 0*2^6 +0*2^5 +0*2^4 +0*2^3 +0*2^2 +1*2^1 +0*2^0 = 2
                               一个负整数  -127 :补码是1000 0001  (计算机中存储形式)
                                                             变成十进制是1*(-2^7)+ 0*2^6 +0*2^5 +0*2^4 +0*2^3 +0*2^2 +0*2^1 +1*2^0 = -128+1=-127
                                                     -128: 补码是1000 0000   
                                                              变成十进制是1*(-2^7)+ 0*2^6 +0*2^5 +0*2^4 +0*2^3 +0*2^2 +0*2^1 +0*2^0 = -128
                                                     -1:补码是1111 1111
                                                            变成十进制是1*(-2^7)+ 1*2^6 +1*2^5 +1*2^4 +1*2^3 +1*2^2 +1*2^1 +1*2^0 = -128+127=-1
                               整数和负数取值范围主要的差别是:0000 0000 = 0 (不算是正数的范围)
                                                                                              1000 0000 =-128 (算负数的范围)

                                  有个这个基础之后,就会自然的理解传说中的 “按位取反在加1“ 是什么含意了









一家之言,欢迎拍砖!

      

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值