关于计算机的原码,反码,补码

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

作为初学者,关于计算机的原码,反码,补码理解起来稍有困难,这里笔者给出自己的理解供大家参考.


提示:以下是本篇文章正文内容,下面案例可供参考

一、原码,反码,补码是什么?

计算机中,数据分正数 负数 0 。

正数:

        原码,反码,补码相同.

负数:

        符号位 + "真码",

正数的符号位为0, 负数的符号位为1

"真码":数据的二进制的真实表示形式。

10010001 ---》145

例如:一个字节: 8位 2个字节 16

+0:0000 0000

-0: 1000 0000

补码:

        反码+1,

前提: 正数的补码与原码相同.

只有负数的补码: 反码+1

反码: 除符号位之外,其余按位取反。

前提: 正数的反码与原码相同,只有负数的反码,是除符号 位以外,按位取反。

二、如何理解

1.例子

13:-------》

计算机中存储二进制的形式 0000 1101

-13:--------》

原码: 1000 1101

反码:符号位不变,按位取反: 1111 0010

补码: 1111 0011

2.如何算出某个值在计算机中储存的二进制真码

例如:

        int n = -127 ;
        System.out.println(Integer.toBinaryString(n));

结果为

 

计算过程: -127代表的值是1000 0000 0000 0000 0000 0000  0111 1111.但这里因为是负数,所以计算机实际计算的时候需要进行负数的原码,反码,补码的转换,也就是在1000 0000 0000 0000 0000 0000 0111 1111取反码为1111 1111 1111 1111 1111 1111 1000 0000,然后在补码加1,结果为1111 1111 1111 1111 1111 1111 1000 0001.正解.


 3.扩展

当涉及到数据类型转换时,如图案例.

int a = 130 ;
byte b = (byte)a ; 
System.out.println(b);

这时计算机输出结果为-126,为什么? 

解答:

130的二进制为1000 0010,这个是计算机经过计算得到,前面还有24个0.当把它变为byte类型时,因为范围只有一个字符,所以前面24个0都被砍掉了.所以变成了1000 0010.那么这时候在计算机里变成了负数,那么从负数的补码变为原码,答案为1111 1110.前面的1是符号不输出,结果就是111 1110.换算为十进制,结果为-126.


总结

以上就是今天要讲的内容,本文仅仅简单介绍了计算机中的原码,反码,补码,希望对大家有所帮助.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值