zoukankan      html  css  js  c++  java
  • C语言中的原码、反码和补码

    我们都了解2进制8进制和16进制的转化

    也知道了数据在内存中存储的时候都是二进制的形式存储的。

    那么什么事原码、反码和补码呢  其实他们都是二进制。只不过是二进制的不同的表现形式。

     

    下面举例子,例如:

    1.原码

    最高位表示符号位。剩下的位数,是这个数的绝对值的二进制

    就比方说 一个完整的int型变量在内存中占的是4个字节,32位的编译器中 那么这时候他的二进制表示是00000000 00000000 00000000 00000000

    所以

    10的原码就是00000000 00000000 00000000 00001010

    那么负数的原码就是例如

    -10的原码10000000 00000000 00000000 00001010

     符号位是第一位 0为正数 1为负数

    2.反码

    正数的反码和其原码是一样的

    附属的反码就是在其原码的基础上 符号位不变 其他位取反。

    10的反码就是 00000000 00000000 00000000 00001010    和上面一样

    -10的反码就是11111111 11111111 11111111 11110101     和上面1和0是相反的

    3.补码

    正数的补码就是其原码

    附属的补码就是在其反码的基础上+1

     

    10的补码就是00000000 00000000 00000000 00001010

    -10的补码就是 11111111 11111111 11111111 11111011

     

    总结

    10

        10的原码:00000000 00000000 00000000 00001010

        10的反码:00000000 00000000 00000000 00001010

        10的补码:00000000 00000000 00000000 00001010

    -10

        -10的原码:00000000 00000000 00000000 00001010

        -10的反码: 11111111 11111111 11111111 11110101

        -10的补码: 11111111 11111111 11111111 11111011

     

    任何数据都是以其二进制的补码形式存储在内存中的

    为什么数据要以补码的形式存储呢?

    因为计算机中只有加法没有减法.为了更加低成本的计算出结果,所以使用补码来存储数据.

    计算机中只有加法没有减法.为了更加低成本的计算出结果,所以使用补码来存储数据.

    下面我们看一个例子 这个例子也是我看的时候特别能帮助我理解的 清晰明了,例如 :

                 3 + 2;

                 3 - 2; 这个减法运算对于计算机而言它的理解是 3 + (-2); 1

        使用原码计算.

        3的原码    00000000 00000000 00000000 00000011

        -2的原码   10000000 00000000 00000000 00000010

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

                       10000000 00000000 00000000 00000101 结果是1个负数明显是不对的

        使用反码计算.

        3 的反码:  00000000 00000000 00000000 00000011

        -2的反码:  11111111 11111111 11111111 11111101

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

                       00000000 00000000 00000000 00000000        0

        使用补码计算

        3 的补码:   00000000 00000000 00000000 00000011

        -2的补码:   11111111 11111111 11111111 11111110

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

                        00000000 00000000 00000000  00000001       1

        注:使用补码来做运算效率是最高的.

  • 相关阅读:
    window安装php的mongodb扩展
    Android NDK开发步骤(r9)
    osgViewer销毁bug
    C/C++ typedef用法
    Java并发编程:Lock
    java中构造器(Constructor)
    进程和线程关系及区别
    Java总结篇系列:Java泛型
    在powerdesigner中创建物理数据模型
    非常好的理解遗传算法的例子
  • 原文地址:https://www.cnblogs.com/wangxiaoqi/p/6419676.html
Copyright © 2011-2022 走看看