• C语言之原码、反码和补码


    原码、反码和补码

     1).数据在内存中存储的时候都是以二进制的形式存储的.

        int num = 10;

        原码、反码、补码都是二进制.只不过是二进制的不同的表现形式.

        数据是以补码的二进制存储的.

     2). 1个int类型的变量.在内存中占据4个字节, 32位.

        00000000 00000000 00000000 00000000

        在不考虑正负的情况下.1个int类型的变量可以表示接近43e种数据.

        为了可以表示正负性.使用最高为来表示这个数的正负性.

        如果最高为是0 那么表示这个数是1个正数

        如果最高为是1 那么表示这个数是1个负数.

        所以,来表示数据的只有31位. 所以,1个int类型的变量.

        最小值是: -2147483648  最大值是:2147483647

     3). 原码

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

        10的原码.

        00000000 00000000 00000000 00001010

        -8的原码.

        10000000 00000000 00000000 00001000

        绝对值: 正数的绝对值是自己,负数的绝对值去掉负号.

        -20.

        10000000 00000000 00000000 00010100

     4). 反码

        正数的反码就是其原码.

        负数的反码就是在其原码的基础之上 符号位不变,其他位取反.

        10的反码:

       

        10的原码:00000000 00000000 00000000 00001010

        10的反码:00000000 00000000 00000000 00001010

        -8

        -8的原码:10000000 00000000 00000000 00001000

        -8的反码:11111111 11111111 11111111 11110111

     5). 补码

        正数的补码就是其原码.

        负数的补码就是在其反码的基础之上+1

        10.

        10的原码:00000000 00000000 00000000 00001010

        10的反码:00000000 00000000 00000000 00001010

        10的补码:00000000 00000000 00000000 00001010

        -8

        -8的原码:10000000 00000000 00000000 00001000

        -8的反码:11111111 11111111 11111111 11110111

        -8的补码:11111111 11111111 11111111 11111000

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

        int num = -8;

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

       

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

        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

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

  • 相关阅读:
    Rotation issue in XCode 4.5 and iOS 6.0
    Core Data on iOS 5 Tutorial: How To Work with Relations and Predicates
    How To Synchronize Core Data with a Web Service – Part 2
    Unit Testing in Xcode 4 – use OCUnit and SenTest instead of GHUnit
    Migrate old project to ARC
    Core Data on iOS 5 Tutorial: Getting Started
    How To Draw Graphs with Core Plot, Part 2
    How To Use NSOperations and NSOperationQueues
    How To Save Your App Data With NSCoding and NSFileManager
    What's New in iOS
  • 原文地址:https://www.cnblogs.com/burningc/p/10741253.html
Copyright © 2020-2023  润新知