zoukankan      html  css  js  c++  java
  • 原码补码反码

    第一次接触源码补码反码的时候是大一的计算机算法导论。
    后来在数电接触过一次,在学网络原理的时候,关于子网掩码的计算又接触过。
    一直没把关系屡清楚...
    马上就要组原考试了,今天怎么着做个了断对吧。

    1.序言(由之前的基础的话,跳过去看第二节)

    万事万物肯定是来源是生活的
    首先计算机参与运算的数有两大类, 有符号数无符号数
    他们都放在了寄存器之中。通常我们也称为寄存器的位数是机器字长。
    这里注意。机器字长也是决定计算机硬件的主要技术指标。决定计算机性能的这个问题,我们之后再谈。

    那啥是机器字长啊, 举个例子吧那就
    cpu的寄存器要运算器东西,肯定有个限度吧。
    他要是做运算的时候,给他发过来一个八位的代码,他机器字长正好是八位的。就可以处理。
    那人家要是传一个十六位的代码,岂不是就GG了。  他只能处理八位的,那就只能让人家发两遍,第一次运行前八位的,第二次再把剩下的八位没运算的算完。
    用脚指头想都知道,这算两次,在其他条件的情况下。 时间可就是double了啊。

     好,我们大概知道机器字长的概念了,继续。
    万事万物都来源与生活。
    如果生活只有正数的话....岂不是如果有赊欠、损失、消费、开支等等这些就太麻烦了
    (所有数学家是真牛逼,一个负号就解决了)
    负号大家用着很方便,但是计算机他去哪里知道什么是负数去啊....
    所以这就有了有符号数这么一说,有符号数的第一位就作为判断这个数正负而空出来。其他的位数用来存储数据。

    那么无符号顾名思义,就是在计算机在进行存储运算的时候,所有的位数都用来进行储存数字了,毫无正负可言。

    那么如果一个16位机器字长的寄存器为例子。
    如果存储的是无符号数,那么可以表示的范围是 0~65535   (2的16次方-1)
    但是存储的是有符号数,那么可以表示的范围是 -32768~32767(2 的15次方-1) ()

    计算机就是个会处理01的机器,别说是正负号了,你拿+ -  都白搭啊
    那你既然知道0 和1 是啥  那咱们就规定一下吧   0就代表正数,1代表负数。

    大概就是这个样子了
    前两行是小数点的有符号数表示
    后两行是整数的有符号数表示。

    2.原码补码反码计算方法。

    需要速查的可以看这里。

    那么 (+)(-)1 这个数字如何在机器字长为8位的寄存器中,分别用原码、反码、补码来表示呢

    2.1原码: 难度系数★☆☆☆☆

    数字±1的原码是(注意逗号)

    [+1] = 0,000 0001

    [-1] = 1,000 0001

    数字±0,1的原码(注意小数点)

    [+0.1] = 0.100 0000

    [-0.1] =  1.100 000

    我们看到第一位的数值被占用,  用0或者1 作为判断正负的标志。
    那么笔者再举几个例子吧。

    +1010111
    -1011011
    +110
    -10011

    那么这些的原码分别是什么呢

    1,1010111
    0,1011011
    1,110
    0,10011
    再多的例子我也举不出来了,咱们之间可以上公式嘛。

    x是真值,n是位数。想深究的同学可以自己带进去看看,不过不建议记公式,理解就好了。

    2.2反码  难度系数★☆☆☆


    我们先看一下公式吧。

    emmmm   这个公式我要是套进去算一算的话,我也得搞一会。

    简单的说,
    正数的反码是他原码
    负数的反码是在其原码的基础上, 除了符号位数不变,其余位取反.

    平常反码也就是用原码求反码过程的过渡。

    那咱们举个例子来看看吧。

    来,来几个数字!
    +11001010
    +11010101
    +11111001
    他们如果求反码的话,把整数摘掉就好了 前面加个0,即可。
    那么如果是负数呢?
    来,上几个数字!

    -1001
    -1101
    -1001

    先把他们搞成原码,相信同学大家都会了对吧~
    1,1001

    1,1101

    1,1001

    (以后原码补码反码出现正负号就乱棍打死丫的。计算机不认识正负号!!!)

    符号位不变,其他值取反。

    1,0110

    1,0010

    1,0110

    嗯嗯就是这样就是这样了。

    2.2补码  难度系数★☆☆

    好了好了,来来来补码let's go

    补码这个东西是吧。

    上公式先,

    好的,我知道反正你不想看。

    那我就简单来说吧

    正数的补码就是其本身

    负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

    x=+1001

    [x]反=0,1001

    [x]补= 0,1001  (我再说一遍,谁要是在原码补码反码上写正负号 就乱棍打死丫的。 计算机不认识正负!!!)

    x=-1001

    [x]原码=1,1001

    [x]反码=1,0110

    [x]补码=1,0111

  • 相关阅读:
    Apache 虚拟主机 VirtualHost 配置
    EAX、ECX、EDX、EBX寄存器的作用
    Python中文文档 目录(转载)
    八度
    POJ 3268 Silver Cow Party (最短路)
    POJ 2253 Frogger (求每条路径中最大值的最小值,Dijkstra变形)
    2013金山西山居创意游戏程序挑战赛——复赛(1) HDU 4557 非诚勿扰 HDU 4558 剑侠情缘 HDU 4559 涂色游戏 HDU 4560 我是歌手
    HDU 4549 M斐波那契数列(矩阵快速幂+欧拉定理)
    UVA 11624 Fire! (简单图论基础)
    HDU 3534 Tree (树形DP)
  • 原文地址:https://www.cnblogs.com/EEEE1/p/8098876.html
Copyright © 2011-2022 走看看