zoukankan      html  css  js  c++  java
  • 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

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

    不忘初心,方得始终
  • 相关阅读:
    Android开发总结
    LeakCanary原理分析
    机器学习
    Kivy 中文教程 实例入门 简易画板 (Simple Paint App):2. 实现绘图功能
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 3. 循环
    Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 1. 神秘朋友
    Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 0. 准备工作
    远程显示(操作) 服务器 GUI 程序(图形化界面) (基于 X11 Forwarding + Centos + MobaXterm)
  • 原文地址:https://www.cnblogs.com/jialiangliang/p/6044700.html
Copyright © 2011-2022 走看看