• 计算机基础知识:原码、反码、补码


    可能很多人有这样的疑问,我们为什么要了解原码、反码、补码,它能帮助我们解决什么问题?在编写代码中有什么实际用途呢?

    我是这样认为的,其一,作为计算机基础知识,我们必须有所了解。其二、这些基础知识无论是普通的编写代码,还是研究高超的算法都离不开它。

    例:我们常见的位运算  按位与(&)、按位或(|)、取反(~)等等。

           在代码中, 我们可能经常会碰到这样的需求,要计算一个数是偶数或奇数,一般我们这样写  n % 2 取余,如果余0则为偶,否则为奇。

           我们可以利用按位与(&)很巧妙的解决这问题,而且效率会更高,因为位运算是对内存数据进行操作,不需要转换成十进制,因此它的处理速度更快。

           我们来判断整数n是奇是偶,可以运用表达示 n & 1,如 n = 5, n & 1返回值1;   如n=6,n&1返回值0;因为,在二进制里面,末位为0表示偶数,为1表示奇数,效果与n % 2 取余是一样的,但比它要快。

    当然,除了这个,还有非常多的用途。

    好啦,我们进入正题!

    ------------------------------------------------------------------------------------------------------------------------------------------------

    我们知道,计算机中所有数据最终都是以二进制数表示。

    相信大家也学过如何将一个十进制数转换为二进制数,如果觉得换算比较麻烦,可以用系统自带的计算器辅助换算。

    我们也学过字节与位,1字节=8位,通常在Asp.net、Java等高级编程语言中int类型默认以32位(4字节)表示,当然你可以显示申明以16位或64位表示。现假设有int类型数,值为9,在计算机中以二进制方式表示如下:

    --8位--

    0000 1001

    --16位--

    0000 0000 0000 1001

    --32位--

    0000 0000 0000 0000 0000 0000 0000 1001

    --64位--

    0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1001

    通过以上可以看出,数值9转换成二进制是0000 1001,在16位、32位或64位中它们占位比较多,所以前面补0填充。

    OK,这是数值9的二进制表述,那么如果是-9,它在计算中如何表述呢?

    在计算机中,负数是以其正值的补码形式表述的。这就需要我们搞清楚什么是原码、反码、补码,他们之间有什么暧昧的关系啦。

    原码:一个整数,按照绝对值换算成的二进制数,称为原码。(数的绝对值:正数和零的绝对值是它本身,负数的绝对值是它的相反数。总之,一个数的绝对值是非负数。)

       如:数值-9的绝对值为9,数值9的二进制是 0000 1001,这就是-9的原码。

    反码:在原码基础上按位取反,产生的新二进制数称为原二进制数的反码。简单理解就是:原为1的变成0,原为0的变成1.

       如:数值-9的原码是 0000 1001。把它的每一位取反后为 1111 0110

    补码:反码加1为补码。(补码=反码+1; 反码=原码取反; 原码=数值绝对值的二进数数)

            如:数值-9的原码是 0000 1001。把它的每一位取反后为 1111 0110,计算补码=反码+1,也就是 1111 0110 + 1 = 1111 0111

    因此,数值-9在计算机中二进制表述为:1111 0111

    我们再来一例:-15在计算机中如何表述:

    1、原码,数值-15的绝对值15,它的二进制表述是 0000 1111

    2、反码,原码基础上取反为:  1111 0000

    3、补码,反码+1得补码,  1111 0001

    所以-15在计算机里用二进制表述就是 1111 0001

  • 相关阅读:
    WebFlux系列(二) Server-Sent Events
    WebFlux系列(一)HelloWorld
    Reactor系列(十九)StepVerifier测试
    C++中vector和set使用sort方法排序
    获取线程ID
    C标准中一些预定义的宏__DATE__ __FILE__ __LINE__ __TIME__ __func__
    opencv测试代码
    nohub相关
    tensorflow相关练习
    摄像机相关
  • 原文地址:https://www.cnblogs.com/event/p/6406293.html
Copyright © 2020-2023  润新知