• 原码补码反码


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

    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

  • 相关阅读:
    Javascript的一些小知识点
    Peterson和多线程版本号
    java 数据流DataOutputStream和DataInputstream
    Domino 怎样整Hibernate最佳实践
    学生管理系统
    最小生成树Kruskal算法的提出者Joseph Bernard Kruskal,Jr.
    创建一个Low-touch Silverlight 集成
    LeetCode OJ
    00106_UDP通信
    雷林鹏分享:jQuery EasyUI 树形菜单
  • 原文地址:https://www.cnblogs.com/EEEE1/p/8098876.html
Copyright © 2020-2023  润新知