admin 管理员组

文章数量: 887031

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

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

文章目录

  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结


前言

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


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

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

计算机中,数据分正数 负数 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.


总结

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

本文标签: 关于计算机的原码 反码 补码