精华内容
下载资源
问答
  • 3.1补码定点小数的加减运算 3.2补码定点小数的乘除运算 3.3对运算的结果近似截取一定位宽 3.4实际应用中的例子 1.原码,反码,补码 原码:n位的二进制数,最高位为符号位,正数为0,负数为1。剩下的n-1位表示该...

    目录

    1.原码,反码,补码

    2.补码的意义

    3.Verilog中的补码运算与定点小数

    3.1补码定点小数的加减运算

    3.2补码定点小数的乘除运算

    3.3对运算的结果近似截取一定位宽

    3.4实际应用中的例子


    1.原码,反码,补码

    原码:n位的二进制数,最高位为符号位,正数为0,负数为1。剩下的n-1位表示该数的绝对值

    反码:原码的符号位不变,正数不变,负数按位取反

    补码:反码正数不变,负数加1

    我认为在Verilog中,这样更方便:

    正数的原码、反码和补码是一个;

    负数补码的获得方法:负数的绝对值对应的二进制数取反加一(就不需要用原码反码了)

    如果得到一个补码,如何知道其表示的负数的绝对值呢?补码所有位减一取反 等价于 取反加一。也就是说都是取反加一[1]。

    2.补码的意义

    学过微机原理的应该知道,计算机只会进行简单二进制的加减操作,补码的意义在于:不管这n位二进制是正负数还是有小数,计算机只看成无符号二进制直接运算,而且结果是对的。[2]

    并且,在处理不同位宽的数据时,是将短的数据通过符号位拓展,这都不会影响结算结果的正确性。

    符号位扩展:例如均为补码形式的8位有符号数1101 0011与16位有符号数运算,首先要将8位符号扩展,即符号位填充增加的位上,此数符号位为1,扩展后:1111 1111 1101 0011

    也就是说:补码统一了计算机进行正负数运算,使得符号位也参与运算,并能得到正确结果

    3.Verilog中的补码运算与定点小数

    上一步已经说了在补码运算时要进行符号位宽展,但在将补码看成定点小数,对运算结果小数位的判断、运算结果取近似截取还是要有很多注意的地方。

    定点小数有两种表示方法:
    1.XQN:1位符号位+X位整数位+N位小数位,例如1Q7表示位宽为9的有7位小数位的定点数。
    2.fix(1+X+N)_N:例如fix9_7表示位宽为9的有7位小数位的定点数。
    一个XQN的定点小数所表示的范围:-2^{X}to2^{X}-2^{(-N)}

    3.1补码定点小数的加减运算

    加减是等效的,都需要进行符号位扩展,且扩展的是定点小数的整数位,
    例如:两个fix9_7相加或相减,结果是fix10_7,扩展的是整数位,小数位不变,
    n个数相加减,需要扩展ceil(log_{2}n)位,向上取整。

    3.2补码定点小数的乘除运算

    乘法:相乘需要符号位扩展且小数位与整数位都会改变,类似于十进制的乘法
    例如:两个fix9_7相乘,结果是fix18_14,
    乘法简化为左移时,即低位补0,位宽变长

    除法:除法一般简化为右移操作,高位补符号位,小数位不变
    例如:fix9_7除以8,位宽不变,低3位舍弃,高位补符号位,仍是fix9_7,1 1.011 0101除以8,得到1 1.111 0110

    3.3对运算的结果近似截取一定位宽

    应该对计算的结果值的范围有一定预估,然后进行截取
    xilinx的IP核很多情况下默认都是舍弃小数位,取高位,这是容易出错的。

    例1:对fix14_12格式的数据累加128个后取平均,要求最后结果还是fix14_12,
    首先累加后的结果是fix21_12,取平均即右移8位后还是fix21_12,这时就要取对应的低2位整数+12位小数位作为最终结果,舍弃高位(补码可以直接舍弃包括符号位的高位,对应的整数位就成了符号位)。

    例2:两个fix14_12相乘,因为两个数的范围都不大,结果使用fix14_12也不会溢出,对相乘的结果fix28_24取近似,那我们就要以小数点为准,取整数位中的低2位以及小数位中的高12位,而不是直接取高14位。

    3.4实际应用中的例子

    有符号数映射:OFDM实现中,要对二进制数据进行调制,例如QPSK,将2b数据映射为复平面的一个点(包含实部与虚部)功率归一化后的映射关系为:

    00->(-0.707,-0.707)

    01->(-0.707,0.707)

    11->(0.707,0.707)

    10->(0.707,-0.707)

    用8位二进制如何表示呢?

    要用补码,因为在整个工程中考虑到我使用的数字范围都是-2~2,那我们可以采用fix8_6,

    那0.707*2^6=45.248,取45,补码结果为0010 1101

    -0.707*2^6=-45.248,取-45,将45的补码取反加1,得到1101 0011

    然后将上述二进制赋值给Verilog里的变量,直接对二进制操作,最后得到的结果再映射回来就可以了。

    定点小数是我们给定义的小数位数,是在映射回小数时用到,我们自己心里有数就好,计算机并不知道,也不影响计算结果。

    参考资料:

    [1]https://blog.csdn.net/jiangjieqazwsx/article/details/79942079

    [2]https://blog.csdn.net/leonliu06/article/details/78685197

    [3]https://blog.csdn.net/k331922164/article/details/75579230

    展开全文
  • seid=6420326887479343502前言在本篇中,你将掌握原码、反码、补码、移码的定义和范围原码、反码、补码、移码的转换定点数:小数点的位置固定 ——常规技术浮点数:小数点的位置不固定 ——科学计数法1 无符号数无...

    定点数的表示

    视频链接地址:

    https://www.bilibili.com/video/BV1BE411D7ii?from=search&seid=6420326887479343502

    前言

    在本篇中,你将掌握

    原码、反码、补码、移码的定义和范围

    原码、反码、补码、移码的转换

    b1aa9e70cdb23387126ad9e09dafe797.png

    定点数:小数点的位置固定 ——常规技术

    浮点数:小数点的位置不固定 ——科学计数法

    1 无符号数

    cb910a5d55366e37cfc4d38a176fd11c.png

    无符号数:整个机器字长的全部二进制位均为数值位,没有符号位,相当于数的绝对值。且通常只考虑无符号整数

    2 有符号数

    2.1 原码

    cdb796738b80ae78ad9b1ab41575a7cd.png

    原码的表示,分成定点整数和定点小数:

    定点整数:符号位 + 数值部分(尾数),如 +5通常写为0,101(假设机器字长是4位)

    定点小数:符号位 + 数值部分(尾数),如 -0.5通常写为1,100(假设机器字长是4位)

    1d1ca4db8a84e55f4593933aa564eecf.png

    其表示范围如上图,对于机器字长为n+1位,原码整数可以表示的范围为:

    0

    2

    0

    +

    2

    1

    +

    2

    2

    +

    .

    .

    .

    +

    2

    n

    1

    =

    2

    n

    1

    (

    )

    0至2^0+2^1+2^2+...+2^{n-1}=2^n-1 (不考虑符号位)0至20+21+22+...+2n−1=2n−1(不考虑符号位)

    原码小数可以表示的范围为:

    0

    2

    1

    +

    2

    2

    +

    .

    .

    .

    +

    2

    (

    n

    )

    =

    1

    2

    n

    (

    )

    0至2^{-1}+2^{-2}+...+2^{-(n)}=1-2^{-n} (不考虑符号位)0至2−1+2−2+...+2−(n)=1−2−n(不考虑符号位)

    且真值0有 +0和-0的两种形式

    2.2 反码

    1e1839a07a6fa3f8b4ec880c14f9b455.png

    反码:

    若符号位为0,则反码与原码相同

    若符号位位为1,则数值位全部取反

    反码只是求补码的一个过程,其表示和范围如上图,不再阐述。

    2.3 补码

    6f7e0fe3f9cee37631900192bc42ba8c.png

    补码:

    正数的补码 = 原码

    负数的补码 = 反码末位 + 1(要考虑进位)

    注意:补码的真值0只有一种表示形式了,且规定

    定点整数1,0000000表示 −

    2

    7

    -2^7−27,也因此定点整数的补码的范围为

    2

    n

    2

    n

    1

    -2^n至2^n-1−2n至2n−1

    定点小数1.0000000表示−

    1

    -1−1,定点小数的补码的范围为

    1

    1

    2

    n

    -1至1-2^{-n}−1至1−2−n

    而将补码转为原码的操作,对于正数 原码 = 补码,对于负数:尾数取反,末位+1

    2.4 移码

    894833abd7b4a8f2cac1cc58421efbbc.png

    移码:补码的基础上将符号位取反。注意:移码只能用于表示整数

    练习:

    f385178769e0eb1834663021c5958927.png

    3 小结

    eea3d0c4aa639535cb24ec3a6eb8b88c.png

    本篇重点:

    (1)原码、反码、补码、移码的定义和范围

    (2)原码、反码、补码、移码的转换

    本篇较为重点,需要自行计算掌握。

    展开全文
  • 首先了解一下原码,反码,补码的概念 ...这里注意一点,在定点小数中,原码是不能表示出-1这个值的 反码 反码的表示方法 简单易懂一些的话其实就是如果是正数,X的反码就等于原码,如果是负数,将X...

    首先了解一下原码,反码,补码的概念

    原码

    原码的表示方法:
    当X为定点整数时

    当X为定点小数时
    简单来说就是,在机器中我们使用0和1来区分一个数的符号,用0来表示正数,用1来表示负数。而原码表示就是将一个数绝对值的二进制表示出来后根据是正数还是负数在前面加0或1表示数的符号。这里注意一点,在定点小数中,原码是不能表示出-1这个值的

    反码

    反码的表示方法
    在这里插入图片描述
    在这里插入图片描述
    简单易懂一些的话其实就是如果是正数,X的反码就等于原码,如果是负数,将X的数值位全部取反

    补码

    在这里插入图片描述
    在这里插入图片描述
    对求一个数的补码有一个简单的口诀,若X是正数,则X的补码等于原码,若X是负数,X的补码就是在求出原码的基础上数值位全部取反后在最后一位加1。

    机器数表示范围

    根据上面的定义可以知道,原码和反码对于0有两种表示方法
    原码中
    [+0] = 0.0000,[-0] = 1.0000
    反码中
    [+0] = 0.0000,[-0] = 1.1111
    补码中
    [+0]=[-0]=0.0000
    这里可以知道,在表示数据的时候,补码比原码少了一个-0,而由于表示数据所用的位数是一样的,也就是能表示的整数的个数不会变,所以补码会比原码和补码多表示一个数

    对于定点整数

    设位数一共为8位
    原码表示范围为 -127-127,即1111 1111~0111 1111
    反码表示范围为 -127-127,即1000 0000~0111 1111
    补码表示范围为 -128-127,即1000 0000~0111 1111
    我们可以尝试求一下-128的原码,但可以发现7位二进制表示不出来,必须得用8位二进制表示,但这样符号位就被占用了。但由于上面说的补码比原码和补码少一个0的表示方法,这就让补码多了一个10000000来表示其他的数,这里具体的细节我也不是很懂@_@,但可以这样记吧,-1到-127已经有对应的原码和补码了,所以也会有对应的补码,而10000000首位是1代表负数,不能和其他数的表示起冲突所以就是-128了。由此,补码可以表示128个负数,1个0以及127个负数共256个数

    对于定点小数

    还是设位数一共8位
    原码表示范围为1.111 1111 ~0.111 1111,即-127/128到127/128
    反码表示范围为1.000 0000~0.111 1111,即-127/128到127/128
    补码表示范围为1.000 0000~0.111 1111,即-1到127/128
    在这里原码和反码都好理解,就是补码会有一个问题,为什么补码会有一个1.000 0000而且居然对应的值是-1,也就是说如果小数用补码表示的话最小值是-1。这里如果用一开始说的取反加一你会发现根本不是这个值。之后才知道取反加一靠的是原码,但看前面原码的定义公式你会发现原码根本表示不了定点小数-1,原码所能表示的是定点整数-1,定点小数-1这里严谨一点的话其实是-1.0。
    这里要求定点小数-1.0的补码的话就要用到上面的补码定义公式了(要不然我怎么会贴hhh),由公式可知,-1.0的补码为2+X = 2-1.0 = 1.000 0000
    当然也有这样的理解
    在这里插入图片描述
    总结:由于补码表示0的唯一性,补码比原码少一个-0的表示,多一个-1的表示以及负整数表示范围多了一个-128
    PS:主要是把自己最近碰到的问题写一下让自己记牢一些。其实如果把上面贴的几个公式吃透的话这些问题根本不会有的orz,注意对比原码反码补码边界的取值你会发现其实说的就是这些东西orz

    参考:

    http://bbs.kaoyan.com/t2806127p1

    展开全文
  • 原码、反码、补码表示范围是如何得到的原码纯整数的原码纯小数的原码反码纯整数的反码纯小数的反码补码纯整数的补码小数补码原码首先说原码,原码是有符号数中最简单的编码方式。原码表示法在数值前面增加了一...

    原码、反码、补码的表示范围是如何得到的

    原码

    纯整数的原码

    纯小数的原码

    反码

    纯整数的反码

    纯小数的反码

    补码

    纯整数的补码

    纯小数的补码

    原码

    首先说原码,原码是有符号数中最简单的编码方式。原码表示法在数值前面增加了一位符号位(即最高位为符号位):0表示为正数,1表示为负数,其余为数值位,表示数值大小。

    纯整数的原码

    原码的范围是 – (2n–1) ≤ x ≤ 2n–1(n是整数位数)

    这是如何得到的呢?

    以机器字长为8为例,符号位占1位,那么剩下有7位的数值位,如果不考虑整数的符号,那么这7位数最大的时候为全1,即111 1111,转换为十进制为27–1。

    当符号位为0,即0111 1111,此时该数最大,为27–1;

    当符号位为1,即1111 1111,此时该数最小,为 – (27–1) 。

    即当数值位有n位时(机器字长为n+1位),

    纯整数的原码的范围是 – (2n–1) ≤ x ≤ 2n–1。

    纯小数的原码

    原码的范围是 – (1–2–n) ≤ x ≤ 1–2–n(n是数值位数)

    同样以机器字长为8为例,即有7位的数值位,如果不考虑小数的符合,那么这7位数最大的时候为全1,即0.1111 111,那这该怎么计算?难道要用2-1+2-2+……+2-n吗?如下图所示:1125031261a8a53ffece09cef1ef9520.png即当符号位为0,即0.1111111,此时该数最大,表示为1–2–7;

    当符号位为1时,即1.1111111,此时该数为负数,且为最小负数,表示为 – (1–2–7)。

    即当数值位有n位时(机器字长为n+1位),

    纯小数原码的范围是 – (1–2–n) ≤ x ≤ 1–2–n(n是数值位数)。

    反码

    反码通常用来作为由原码求补码或由补码求原码的中间过渡。

    正数的反码与原码是相同的,而负数的反码是将数值位按位取反,就可以得到。

    纯整数的反码

    以8为机器字长为例,由于正数的反码与补码相同,因此对于最大正数的由来这里不多赘述,同上。那么最小负数如何得来?

    其实与原码也是同一个道理,但是由于负数的反码要按位取反,数值位的全0会变成全1,同样,如果真值的数值位为全1,那么反码表示则会为全0,加上符号位的1,

    即最小负数用原码可表示为1,1111111,反码则表示为1,0000000,即反码可表示的最小负数–(27–1)。

    故当机器字长为n+1时,

    纯整数的反码表示范围是 – (2n–1) ≤ x ≤ 2n–1,与原码是相同的。

    纯小数的反码

    纯小数的反码与上述纯整数的反码是类似的,这里不多赘述,它的表示范围与纯小数的原码是相同的,最关键的就是记住按位取反。

    故纯小数反码的范围是 – (1–2–n) ≤ x ≤ 1–2–n(机器字长为n+1)。

    补码

    由于正数的原码、反码和补码都是相同的,故在这里我们就只讨论负数,而最大值(即最大正数)都是同原码相同的。

    补码是在反码的基础上(按位取反),末尾再加1。

    纯整数的补码

    要正确理解补数,必须要知道补码就是同余。机器字长为8位时,只能表示256个数,但我还想表示一些负数怎么办?就用该负数同余的正数来表示。例如-1=255,-2=254。它的模就是28=256,而负数的补码为模与该负数绝对值的差值,则 – 128 = 256 – 128 = 128,所以–128的补码是10000000。无符号正数从0到255,补码表示的有符号正数从-128到127,其实刚好都是一个相互对应的。

    由此可知,当数值位为n时(机器字长为n+1),

    纯整数的补码的范围是 – 2n ≤ x ≤ 2n–1

    纯小数的补码

    对于小数,补码的最小负数是最让人难以理解的,为什么补码的1.000 0000对应的真值是-1呢?

    如果我们采用对补码取反加一的方法,可以发现结果根本就不是这个值,而结合前面纯小数原码的取值范围,我们发现,在纯小数中,原码和反码都不能表示-1, 他们都只能表示纯整数的-1。从纯小数补码的定义可知,-1.0的补码为2–1.0=1.000 0000。有没有发现这跟上述的纯整数的补码非常相似,只不过纯整数的补码模取的是2n+1,而纯小数补码中,模取的是2,这样我们对于负数的补码就可以清晰的理解了。

    因此,纯小数补码的范围是 – 1 ≤ x ≤ 1–2–n(机器字长为n+1)。

    综上可发现,原码和反码的表示范围是相同的,记住一个,另一个也就记住了,而补码的表示范围中,最大正数是与原码反码相同,但是负数就有区别了。对纯小数来说,补码可表示的最小负数是 – 1;对于纯整数来说,补码可表示的最小负数是 – 2n。

    展开全文
  • 详解 有符号定点小数补码表示

    万次阅读 多人点赞 2019-02-23 11:16:23
    布莱恩特),理解定点小数补码表示时绕了些弯路,在这里记下来,以作巩固。 概念补充  补码(Two's complement)、反码(Ones' Complement)、原码(Sign Magnitude):  注意,补码和反码中,撇号的位置不同。  ...
  • 定点小数补码表示法介绍

    千次阅读 2011-07-20 16:34:00
    补码表示法,是用机器数的最高一代表符号,以下各位给出数值按2取模结果的表示方法,其定义为 [X]补= (2.10) 例如: X=+0.1011, [X]补=01011 X=-0.1011, [X]补=10101 按补码的定义,当X=-0.1011时,[X]补 = ...
  • 注:-128的补码定点小数-1的补码补码中比较特殊 先看下公式 1. -128的补码是1,0000000? [+0]原=0,000 0000 [-0]原=1,000 0000 [+0]反=0,000 0000 [+0]反=1,111 1111 [+0]补=0,000 0000 [-0]补=0,000 0000 ...
  • 定点小数补码表示法介绍[转载]

    千次阅读 2011-12-07 18:08:12
    补码表示法,是用机器数的最高一代表符号,以下各位给出数值按2取模结果的表示方法,其定义为  [X]补= (2.10)  例如:  X=+0.1011, [X]补=01011  X=-0.1011, [X]补=10101  按补码的定义,当X=-0...
  • 有符号整、小数的原、反、补码表示范围,及补码比原、反码多表示的原因。计算机组成原理学习笔记。
  • 定点小数补码乘(校正法)

    千次阅读 2012-10-17 22:37:39
    // 定点小数补码乘(校正法) // http://blog.csdn.net/justme0 #define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; const int n = 4; // 数值位数 // a,b...
  • 定点小数补码乘(Booth比较法)

    千次阅读 2012-10-18 11:34:28
    // 定点小数补码乘(Booth比较法) // http://blog.csdn.net/justme0 #define _CRT_SECURE_NO_WARNINGS #include #include #include using namespace std; const int n = 4; // 数值位数 // a,b联合右移...
  • matlab实现十进制到二进制定点有符号补码小数的转换,其中定点小数的整数部分长和小数部分长可以自己指定,输出的最高位表示符号(0为整数,1为负数),补码表示
  • n位的无符号数表示范围为:000 ~ 2n−12^n-12n−1 二、有符号数 有符号数用“0”表示“正”号,用“1”表示“负”号。有符号数的机器表示有原码、补码、反码和移码。 三、定点小数和定点整数 定点表示即约定机器...
  • 8位小数定点机中的数据表示 S.XXXXXXX S是正负符号,后面的7个X是数值
  • 若机器字长为8,则数的表示范围 0~28-1 , 即0~255。 有符号数:在机器中,数的正负我们无法识别,但是我们可以用二进制数来代替正负号。一般‘0’为正,‘1’为负,符号一般在有效数的最前面。若机器字长为8,...
  • 原码、反码和补码表示范围

    千次阅读 2017-01-03 14:32:09
    首先形成的概念是:原码和反码小数表示范围是一样的,仅仅是二进制的存储不同罢了。 更有趣的是它们的存储范围是关于零点对称的! 原码小数,反码小数都是:−1+2−n=x=1−2−n 中间是+0,−0两种 x0x1x2x3…...
  • 定点表示:Q 格式和加法举例 本文翻译自... 定点表示是的我们可以在低开销的整数硬件上使用小数运算。本文首先介绍小数表示方法Q格式,然后给一些定点加法的例子。 在低开销D...
  • 2、 有符号数:最高为符号,有原码、补码、反码、移码表示 机器数的定点表示 原码、补码、反码、移码 1原码:机器数最高位表示符号,其余的表示数的绝对值 2、 补码表示法 3、 反码表示法: 通常作为原码求...
  • 2、如果对定点数据格式不清楚的话,此处做一个说明:fixX_N格式指的是:一共有X位二进制数,其中第一位是符号位,最后面N位小数位,中间(X-N-1)位是整数位。 3、如果由于编辑器 编码格式 问题导致中文注释乱码,请...
  • 需要注意的是,定点小数用原码来表示,定点整数用移码来表示,(带符号整数是用补码表示的,原因在另一文章中有记录。) 我们从浮点数开始说起: 此图为截取慕课网文档素材,32的浮点数编码表示,第0位数...
  • n位补码定点小数表示范围是-1~(1-2-(n-1)),其分辨率为2-(n-1) 。 溢出判断与移位 单符号位判断方法 当任意的两个带符号数相加时,若最高数值位的进位与符号位进位同时都产生进位或者都没有产生进位时,运算就没有...
  • 顾名思义定点数就是小数位固定不变的数叫做定点数,也就是小数点是定在某个位置不变的数。 2、定点数的分类: (1)定点整数:定点整数的小数点后面没有其他的数值,即小数点定在了数的最后面 定点整数又分为...
  • 本文写作时长3小时计算机中,定点数的表示法有三种:原码,反码,补码。99%的计算机使用补码表示。由于无符号定点数的原码,反码,补码都是一样的,所以也所谓什么原反补了。原码有符号数的原码表示最高为符号,...
  • 这就需要有一个符号,单独地表示数字的正负,符号被认为地规定在最高,比如8有符号整数,那么最高的第八单独用来表示正负,那么 -5 就可以变成10000101了,这是好的 可是这又引申出另一问题:如何计算不同...
  • 小数转换与定点补码

    千次阅读 2011-12-22 23:16:12
    十进制纯小数转换为二进制小数,采用乘2取整法。...然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效,后取的整数作为低位有效。 0.625 = (0.101) B 0.625 * 2 = 1.25 取出整数
  • 负数补码表示范围以及规格化数

    千次阅读 多人点赞 2020-03-07 20:45:39
    原码形式下 补码形式下 负数补码规格化取值范围
  • 正数补码表示范围:0000 0001~0111 1111(1~127) 负数补码表示范围:1000 0001~1111 1111(-127~-1) 从上面的表示范围来看,正负数的表示范围是一样的。但是除此之外,以0和1开头的八位补码还有两个:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,799
精华内容 1,519
关键字:

n位补码定点小数表示的范围