• 计算机内存数值存储方式


    1)原码:一个数的原码(原始的二进制码)有如下特点:

    • 最高位做为符号位,0表示正,1表示负
    • 其它数值部分就是数值本身绝对值的二进制数
    • 负数的原码是在其绝对值的基础上,最高位变为1
    • 原码表示法简单易懂,与带符号数本身转换方便,只要符号还原即可,但当两个正数相减或不同符号数相加时,必须比较两个数哪个绝对值大,才能决定谁减谁,才能确定结果是正还是负,所以原码不便于加减运算

    eg:char ch=10//char类型在内存中占1个字节,8位

    原码:0000 1010//2^3+2^1

    char ch1=-10

    原码1000 1010

    2)反码

    • 对于正数,反码与原码相同
    • 对于负数,符号位不变,其它部分取反(1变0,0变1)
    • 反码运算也不方便,通常用来作为求补码的中间过渡

    eg:char ch=10//char类型在内存中占1个字节,8位

    原码:0000 1010

    反码:0000 1010

    char ch1=-10

    原码:1000 1010

    反码:1111 0101

    3)补码

    • 对于正数,原码、反码、补码相同
    • 对于负数,其补码为它的反码加1
    • 补码符号位不动,其它位求反,最后整个数加1,得到原码
    • 在计算机系统中,数值一律用补码来存储

    eg:char ch=10//char类型在内存中占1个字节,8位

    原码:0000 1010

    反码:0000 1010

    补码:0000 1010//十六进制为0a

    在内存中以十六进制0a进行存储,一个单元格表示1个字节,8位

     

    char ch1=-10

    原码:1000 1010

    反码:1111 0101

    补码:1111 0110//十六进制为f6

     

     4)计算机系统中,数值一律用补码来存储,主要原因是:

    • 统一了零的编码

    //0在计算机中存储的方式:ina a=0;              int b=-0;

                                               0000 0000          1000 0000

    为了统一0的编码,计算机中没有-0的概念

    • 将符号位和其它位统一处理//在数据计算中,符号位也参与程序的计算
    • 将减法运算转变为加法运算//计算机只会算加法10+(-10)
    • 两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃

    ch-ch1=0;    ch补码:0000 1010

    10+10        ch1补码:1111 0110

                      =1 0000 0000//最高位(符号位)有进位,则进位被舍弃

            =0000 0000

    eg:76-32 =44  76原码:0100 1100  76反码:0100 1100  76补码:0100 1100

    76+(-32)       -32原码:1010 0000  -32反码:1101 1111   -32补码:1110 0000

                                  =1 0010 1100//舍去

                                补码=0010 1100//如果符号位发生变化,数的值也发生变化

                                反码:0010 1100

                                原码:0010 1100=44

    eg:76-82 =-6  76原码:0100 1100  76反码:0100 1100  76补码:0100 1100

           -82原码:1101 0010    -82反码:1010 1101    -82补码:1010 1110  

                                     补码=1111 1010

                                   反码:1111 1001

                                 原码:1000 0110=-6 

    数值不能超过127,否则数据溢出                            

  • 相关阅读:
    CSP-S2020总结
    题解-P6687 论如何玩转 Excel 表格
    题解-UVA12995 【Farey Sequence】
    题解-P4159 [SCOI2009] 【迷路】
    题解-SP2916【GSS5
    102. 二叉树的层序遍历
    力扣 160 相交链表 快慢指针 双指针
    3. 无重复字符的最长子串 滑动窗口
    最大连续1的个数 III
    B树和B+树
  • 原文地址:https://www.cnblogs.com/wanghong19991213/p/13431350.html
Copyright © 2020-2023  润新知