• 计算机原码反码补码


    计算机中保存的数据都是按照补码来保存,涉及到的概念,原码反码补码具体是什么,通过下面几个例子来说明下。

    正数

    正数的原码,反码和补码是一样的。正数的原码,其最高位代表符号位,1代表负数,0代表正数,具体看例子。

    int 20的原码?可以很快的得到如下结果,32个bit,高位补齐为0即可。

    原码:00000000 00000000 00000000 0001 0100

    根据规则,其反码和补码如下。

    反码:00000000 00000000 00000000 0001 0100

    补码:00000000 00000000 00000000 0001 0100

    负数

    负数的原码,最高位为1,反码是固定最高位的情况下,其他低位1变0,0变1,补码是反码的基础上加1,具体看例子。

    int -20的原码?可以很快的得到如下结果,32个bit,除了最高位为1,其他高位补齐为0即可。

    原码:10000000 00000000 00000000 0001 0100

    反码:11111111 11111111 11111111 11101011

    补码:11111111 11111111 11111111 11101100

    0

    考虑到高位为0时,其他位全部为0可以表示为+0,高位为1时,其他位全部为0有可以表示为-0,这样就有两个0,在计算机中-0代表当前数据类型的最小值。

     1 public class operatorDemo{
     2 
     3     public static void main(String[] args){
     4         //测试自增自减类型转换
     5         byte b=127;
     6         //b+=1;//这样写没问题
     7         //b=b+1;//这样写编译不通过
     8         b++;//这样写没问题
     9         System.out.println(b);
    10     }
    11     
    12 }

    输出结果为-128,因为byte 127补码为0111 1111,执行自增运算首先变成了int类型即00000000 00000000 00000000 0111 1111,然后加1变成00000000 00000000 00000000 1000 0000,最后向下转型舍弃高位为byte变成1000 0000,这就是-0,发现通过这个补码无法推测反码再原码,这样就人为规定为-128了,计算机处理这个补码时按照-128来处理。如果byte类型补码是1111 1111时,应该是多少呢?这个高位为1一看就是负数,可以轻松推出反码为1111 1110,再推出原码为1000 0001,这个原码则代表的就是-1,可以看出来补码1111 1111~1000 0000代表范围为-1~-128的负数。

    参考博文:

    (1)https://www.jianshu.com/p/47761557bab0

    (2)https://www.cnblogs.com/youngchaolin/p/10463887.html

    (3)https://www.cnblogs.com/nicerblog/p/11348608.html

  • 相关阅读:
    php的基础知识(三)
    php的基础知识(二)
    css的基础用法(下)
    css的基础用法(上)
    Conceptual blockbusting--chap7 Kinds of blockbusters
    Conceptual blockbusting--chap6 Alternate thinking languages
    Conceptual blockbusting--chap5 Intellectual and Expressive blocks
    Conceptual blockbusting--chap4 Cultural and Environmental blocks
    Conceptual blockbusting
    Conceptual blockbusting- chap2 perceptual blocks
  • 原文地址:https://www.cnblogs.com/youngchaolin/p/11290467.html
Copyright © 2020-2023  润新知