-128___1000 0000

关于计算机中-128的补码问题的解决整理

相信许多朋友都遇到过这样的问题。。。今天总结整理了一下网络上的东西。。。大概可以有三种解释[分别是:取反加1;从高位向8位的推理,以及从和-128相邻数的推理,具体如下。](首先把答案告诉大家,是1000 0000):(网络搜集整理而成。。。)

第一种:在计算机中,负数以其正值的补码形式表达。 

什么叫补码呢?这得从原码,反码说起。 

原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。 

比如 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在计算机中如何表示。 

假设这也是一个int类型,那么: 

1、先取1的原码:00000000 00000000 00000000 00000001 

2、得反码: 11111111 11111111 11111111 11111110 

3、得补码: 11111111 11111111 11111111 11111111 

可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF。 

128=10000000 
按位取反:01111111 
加1 :10000000 
没有溢出,因为没有别的数用10000000来表示。这都是定义好的,记住就是了 .

第二个:你用9位以上的二进制来算-128就能算出来了
比如用16位二进制表示
-128
原码: 1 000 0000 1000 0000
反码: 1 111 1111 0111 1111
补码: 1 111 1111 1000 0000
用9位二进制表示
-128
原码 1 1000 0000
反码 1 0111 1111
补码 1 1000 0000
用8位二进制原码表示-128,实现是"巧妇难为无米之炊

@@@@@@@@@@@@@@

在机器中
负数的补码是这样算的:
先将该负数取绝对值,再用二进制表示出这个绝对值
对该二进制数进行取反加一操作就得到负数的补码了
-128 绝对值是 128
128的二进制表示为:
1000 0000
取反
0111 1111
加1
1000 0000
这就是-128的补码

第三个:   -128的补码为10000000,我很久才找出一种理解,但只是自己的理解,没有得到谁的认可
    按照补码的定义,八位二进制数,一位符号,七位数据,正数补码等于本身,负数补码等于符
号位不变其余每位取反加一,那要先表示出-128的原码,那原码是多少呢?10000000,那是-0
的原码,那怎么写出-128的补码啊,这就是一直困惑的地方
   那-127的原码是11111111,补码是10000001,那-127的补码数据部分再小一就是10000000,
那它的原码是多少啊,负数的补码符合一个规律,数据部分原码与补码的和一定,所以原码小的
补码大,那100000000数据部分比10000001小一,那10000000的原码数据部分要比10000001

大一那就是-128啊,那就是说-128的补码是10000000,那不是0吗,可+0,-0的补码都为00000000
   如果那样的话就可以解释原码(八位二进制数一位符号)的表示范围是-127~127,而补码
的表示范围是-128~127了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值