精华内容
下载资源
问答
  • 定点数

    2020-03-11 23:14:25
    自定义标题定点数的表示原码的表示范围四原码表示的最大整数和最小整数从四原码推导到N原码补码的表示范围 定点数的表示 原码的表示范围 四原码表示的最大整数和最小整数 形式 真值(整数) 真值(小数...

    定点数的表示

    原码的表示范围

    四位原码表示的最大整数和最小整数

    形式真值(整数)真值(小数)
    最大(整/小)数01117(0.111)1-2-3
    最小(整/小)数1111-7-(1-2-3

    最大小数的真值是如何计算的呢?

    最大小数运算辅助值结果
    形式0111(0.111)+0001(0.001)1.000
    真值1-2-3+2-31

    最小小数的真值是如何计算的呢?

    最小小数运算辅助值结果
    形式1111(1.111)+1001(1.001)1.000
    真值-(1-2-3+-2-3-1

    四位原码能表示多少个整数
    -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7共15个
    23*2=16个为什么多出来一个,因为带符号位的原码有一个正零一个负零,多出来一个零应该减去。

    从四位原码推导到N位原码

    整数2N-1-1~ -(2N-1-1)
    小数1-2-(N-1) ~ -(1-2-(N-1))

    N位原码能表示多少个整数
    2N-1

    补码的表示范围

    先观察下表

    -8-7-6-5-4-3-2-101234
    原码11111110110111001011101010010001001000110100
    反码10001001101010111100110111100001001000110100
    加一1111111
    补码100010011010101111001101111011110001001000110100

    四位补码表示最大整(小)数和最小整( 小) 数

    原码补码整数真值小数真值
    最大0111011171-2-3
    最小11111001-0001(20)=-7-1=-8-81.001-0.001=-(1-2-3)-2-3 =-1

    N位补码的表示范围

    N位补码范围N位原码范围
    整数2N-1-1 ~ -2N-12N-1-1~ -(2N-1-1)
    小数1-2-(N-1) ~ -11-2-(N-1) ~ -(1-2-(N-1))

    定点数的运算

    原码加减

    原码不适合做加减运算,步骤:1、判断结果的符合,2、||被减数|-|减数||,3、结果带上符合

    补码加减

    【A+B】补=【A】补+【B】补
    【A-B】补=【A】补+【-B】补
    优点:直接运算

    溢出的判断

    什么是溢出?假设计算机int类型是四位,下表给出溢出的例子

    真值符号位
    a60110
    ++
    b50101
    结果-71111

    两个正数相加却得到一个负数显然是不合常理的,也就是溢出了,这个例子也展现了数据在内存中溢出的真实状态。

    双符号位法

    两个符号位同时运算,双符号位不同则溢出,上溢(超出能表示的最大值),下溢(超出能表示的最小值)

    数值最高位的进位和符号位进位不同则溢出

    结果的符号位如果与其中一个加数不同时则溢出

    定点数的移位

    逻辑移位

    分为逻辑左移和逻辑右移,规则:移出位移走,符号位补零;

    小循环移位

    移出移入到补位位,同时移入到标记C中

    CC
    小循环左移10101
    1010
    小循环右移01010

    大循环移位

    大循环左移,大循环又移,规则:移出位移入到C位,C位移入到补位位

    算术移位

    保留数值的数学意义,对二进制而言左移相当于乘2,右移相当于除2
    有可能溢出或丧失精度
    对于正数而言,三码相同,无论左移右移都补0;
    对负数反码而言,左移右移都补1;
    对负数补码而言,左移在右补0,右移在左补1;

    展开全文
  • 定点数和verilog的有符号定点数操作 在用FPGA做图像处理时,遇到了有符号定点数的计算,查阅了一些资料,用Modelsim做了一些仿真。记录下来,纪念一下喽^_^ 若各位大佬发现错误,一定不要吝惜提出呀。

    数据的表达方式

    数据有两种表达方式:浮点数和定点数。以单精度浮点数为例,表示为打头的一位符号位,紧接着8位指数位,尾巴是23位尾数。其表达方式就像二进制的科学计数法其中表示范围主要由指数位决定,精度取决于尾数。另一个就是本文的主角定点数,定点数的小数点由程序确定,对于2进制数定点数来说,点上小数点就相当于缩小了2^n(n由小数点的位置决定)。由于在FPGA中,以定点数运算为主,浮点数在此就抛掉了。

    定点数详解

    假定芯片是 16 位的,并且使用的定点数都是有符号的。最高位则代表符号位,则数值位占据了低 15 位。数值位又分为整数位和小数位,整数最低位和小数最高位之间为小数点的位置(小数点不占据实际位宽)。
    1.定标
    程序指定小数点的位置即为定标,有两种方法:Q表示方法和S表示方法。
    (1) Q表示法:Qn表示低n位为小数,其余位为符号位和整数位。
    (2) S表示法:Sn中低(15-n)为小数,其余位符号位和整数位。
    即Q表示法中n代表着小数位的位数,S表示法中n代表着整数位的位数。
    在使用XILINX VIVADO 中的IP核,都是以Q表示法表示。
    2. 定点数的表示范围
    (1)定标前
    假设使用Q3格式来表示一个8位有符号定点数,那么他的表示范围是什么呢?硬件处理器中定点数以补码形式储存。而正数的补码是本身,关键在于复数的补码了。
    先以原码形式表示此定点数:
    负数部分: (1111_1111~1000_0000),
    正数部分: (0000_0000~0111_1111),
    装换成反码形式:
    负数部分 : (1000_0000~1111_1111),
    正数部分不变: (0000_0000~0111_1111),
    装换成补码形式:
    负数部分 (1000_0001~1000_0000),
    正数部分不变: (0000_0000~0111_1111),
    由于负数部分补码的最大值(也就是-0)溢出,遂表示为1000_0000,为保证“0”的唯一性,此数规定为十进制的-128。
    所以负数部分的表示范围(-128,-1)
    正数部分不变。表示范围(0,127)
    综合正负两侧,即可得出(-128,127)。
    (2)定标
    定标的意义在于改变数据增长基数的,以Q3为例,未定标的增长单位为1,定标后增长基数为1/23,
    所以表示范围为:(-128/23,127/23)。综合成公式即可有:
    其中N为定点数的位数(排除符号位),n为定标的位数,其中n越大则数据越精确,但表示的范围也会越小
    其中N为定点数的位数(排除符号位),n为定标的位数,其中n越大则数据越精确,但表示的范围也会越小。

    verilog中的有符号定点数

    在verilog中的类型声明默认为unsigned模式,若要声明有符号类型则:

    output 	reg signed	[15:0]	dx,
    output 	wire signed	[15:0]	dy
    

    在声明时一定注意,有符号定点数的表示范围。还有一种使用方法是类型装换符:$signed.

    加减运算

    wire			[7:0]				b;
    wire			[7:0]				c;
    wire 			[8:0] 				a;
    assign		a = $signed( b - c );
    

    这里要注意,加不加此转换符的结果都是一样的,两个正数相减,若出现负数会自动添符号, s i g n e d 和 signed和 signedunsigned都是对结果作用。

    wire 	signed		[7:0] 	b2;
    wire  		 		[7:0] 	c2;
    wire 				[7:0] 	a2;
    initial begin
    	b2 =-3;
    	c2 = 255;
    end	
    assign a2 = b2 - c2
    

    在这里插入图片描述
    无符号数与有符号数进行计算,数据以无符号参与计算,此处可以看到b2由有符号数装换为无符号数,但其结果是一个有符号数。

    移位操作
    左移:左移时数位末尾填零,没多大问题。
    右移:由于右移会在数据的最左侧填0,所以会覆盖原有的符号为,所有可以使用:

    wire		[7:0] 		a;
    wire 		[7:0]		b;
    assign 		b = {a[7],a[7:1]};
    

    或者可以在声明时使数位有一定空闲(对于正数来说就是有效数据前有很多的0,对于负数来说就是有很多1)。

    乘除运算
    乘法运算,运算结果的位数为运算元素位数和。在verilog中简单乘除法用移位来实现,而较为精确的乘除使用乘法器和除法器的IP核实现,所以不用担心。若有符号数使用不熟练,可以使用较大数位,可以避免错误。
    Tips:溢出判断

    module top_module (
        input signed [7:0] a,
        input signed[7:0] b,
        output signed [7:0] s,
        output overflow
    ); 
     
        assign s = a + b;
        assign overflow = ( a[7] && b[7] && ~s[7] ) || (~a[7] && ~b[7] && s[7]);
        
    endmodule
    
    展开全文
  • 定点数相关问题

    2020-09-17 22:36:06
    问题1:为什么进行扩、截??? 两个M相加,结果最高可能为M+1;两个M相乘,结果最高可能为2M。但是随着相乘运算的增加,量化位数太多,一方面占资源,另一方面对处理精度也不会带来改善。因此...

    问题1:为什么进行扩位、截位???

    两个M位的数相加,结果最高可能为M+1位;两个M位的数相乘,结果最高可能为2M位。但是随着相乘运算的增加,量化位数太多,一方面占资源,另一方面对处理精度也不会带来改善。因此必须进行截位操作。

    问题二:怎么选择截取位数???

    截取位数太多,就会丢失有用的信息比特,造成很大误差,截取位数太少,太占资源。所以截取位数的目标是,截位后的定点仿真达到浮点运算的效果。
    在这里,我们选择正数直接截位,即除以2N,负数截位后+1的方式。

    问题三:截位有几种方法???

    截位可以选择截取高位和低位,一般选择去低位,保留高位(round)的截取方法。且在实际工程中,不能直接截去低几位,对于正负数,要考虑进位!

    而去高位保留低位的方法又称为饱和截取法(saturation),需判断截去的高几位是否全0或者全1,是则表示符号扩展位,则截位不会产生溢出,可直接保留低几位;若否,则直接保留会产生溢出,故进行饱和处理(最大值表示),正数用01111…、负数用10000…保留。

    问题四:量化、截位、反量化之间区别???
    1.量化实质上是将原浮点数据归一化后(变为<1的小数),再按比例放大,变为整数定点(int)表示;
    2.截位实质是将很大的定点整数按比例缩小为小的定点整数;
    3.反量化实质是将定点数按原始量化比例缩小为浮点数。

    展开全文
  • 原码有符号的原码表示最高位为符号位,其余位数表示数值符号位占据位7(第8位),剩余7位表示值正数部分最大0111 1111,十进制1270000 0000到0111 1111,+0到+127,共128个负数部分最小1111 ...

    本文写作时长3小时

    计算机中,定点数的表示法有三种:原码,反码,补码。99%的计算机使用补码表示。

    由于无符号定点数的原码,反码,补码都是一样的,所以也所谓什么原反补了。

    原码

    有符号数的原码表示

    最高位为符号位,其余位数表示数值

    符号位占据位7(第8位),剩余7位表示值

    正数部分

    最大为0111 1111,十进制为127

    0000 0000到0111 1111,+0到+127,共128个数

    负数部分

    最小为1111 1111,十进制为-127

    1111 1111到1000 0000,-127到-0,共128个数

    0的表示法

    1000 0000 ,十进制为-0

    0000 0000,十进制为+0

    0的表示法用原码有两种形式,这是不行的

    关于运算

    试试用原码进行1+(-1)运算

    0000 0001

    1000 0001

    1000 0002

    结果等于-2,wrong

    假定+0和-0是两个数

    8位有符号数的原码可以表示256个数

    然而+0和-0是没有意义的,认为是一个数的话,就是255个数

    无符号数的原码表示

    由于没有符号位,所以8位都是数值位

    最小0000 0000,十进制为0

    最大1111 1111,十进制为255

    范围是0~255,共256个数

    反码

    反码规定:正数部分的反码与原码相同,负数部分的反码除去符号位各位取反

    有符号数的反码表示

    负数部分

    原码表示

    1111 1111到1000 0000

    所以反码(去除符号位,各位取反)为

    1000 0000到1111 1111

    正数部分

    原码表示

    0000 0000到0111 1111

    反码(和原码相同)为

    0000 0000到0111 1111

    范围是1000 0000~0111 1111,-127~127

    也是256个数

    关于0的表示

    反码的0也有两种

    1111 1111 和 0000 0000

    看来反码也不行啊 (○´・д・)ノ

    关于运算

    看看1+(-1)的问题解决了吗

    0000 0001

    1111 1110

    1111 1111

    等于0,运算问题解决了,但是0的表示法的问题依旧没有解决

    无符号数的反码表示

    与原码相同

    补码

    补码规定:正数部分的补码与原码相同,负数部分的补码为除去符号位反码+1

    有符号数的补码表示

    负数部分

    原码

    1111 1111到1000 0000

    反码(去除符号位,各位取反)

    1000 0000到1111 1111

    补码 (反码+1)

    1000 0001到1000 0000(溢出)

    正数部分

    原码表示

    0000 0000到0111 1111

    反码(和原码相同)为

    0000 0000到0111 1111

    补码(和原码相同)

    0000 0000到0111 1111

    关于0的表示

    按照这个规则其实0的表示还是两种

    1000 0000 和 0000 0000

    只不过,1000 0000规定为-128

    所以0的表示就唯一了

    负数部分:1000 0000、1000 0001到1111 1111

    就是 -128,-127到-1,所以就是-128到-1

    正数部分:0000 0000到0111 1111

    就是0到127

    整体就是-128-127,嗯,可以

    关于运算

    1+(-1)

    0000 0001

    1111 1111

    0000 0000(溢出)

    刚好是0000 0000

    至此,运算问题解决,0的表示问题解决。那就补码了。

    为什么要有原码,反码,补码?

    有很多原因,只单单从本文角度简单地来说

    原码:解决数值的符号问题

    反码:解决相同数值正负相加不等于0的问题

    补码:解决0的表示不唯一的问题

    4bcf48987c1f

    注意:

    ** 补码的推导过程(本文,以及绝大多数教材)并不完全正确。如果单单从上述观点去理解补码,是理解不了补码的,上述观点只是从结果的某一方面来说,简单粗暴的进行补码推导。**

    理解有限,欢迎指正!

    展开全文
  • 表1给出5种不同整型表达式的3编码。  表1 有符号二进制的常规编码  1.无符号整数(Unsigned Integer)  设X是一个Ⅳ无符号二进制,则其范围是[0,2N - 1],表达式如下:  其中扬是X的第n...
  • 什么定点数

    千次阅读 多人点赞 2021-01-23 13:35:55
    微信搜索关注「水滴与银弹」公众号,第一时间获取...要想理解什么是「定点数」,首先,我们需要理解「定点」究竟是什么意思? 我们都知道,数字既包括整数,又包括小数,而小数的精度范围要比整数大得多,所以如果我们.
  • 0. 概要二进制系列文章...今天介绍的定点数和浮点数,则是对小数点做文章。上一篇文章的开头,我们说到,计算机只能存储数字,因此需要用0和1来表示正负,同样的,计算机的小数点,也要用特殊的形式来表示,共有...
  • 定点数和浮点数

    千次阅读 2018-01-26 15:23:56
    定点数和浮点数代表了数值的两种不同表示格式,由原码或补码构成。  定点数:  用来表示整数和纯小数,其小数点位置固定,并且隐藏起来,一个定点数只包含一种编码。  定点整数:小数点位于最低之后。 ...
  • 定点数与浮点数

    2017-09-30 18:38:56
    通常将定点数据表示成纯小数或纯整数,为了将表示成纯小数,通常把小数点固定在数值部分的最高位之前;而为了将表示成纯整数,则把小数点固定在数值部分的最后面,如下图所示:图所标示的小数点
  • 2.1 数据的表示2.1.1 定点数的表示1.原码表示法在实际生活,我们遇到的数据一般是十进制的、带正/负号的、带小数点的。但遗憾的是,截至目前,计算机能直接处理还只是由0和1组成的二进制数。因此,在计算机,...
  • 探索定点数

    2017-04-25 13:42:41
    探索定点数
  • FPGA浮点数与定点数的转化原理与转化方法(并使用乘法器进行两个定点数的相乘)基础知识什么是浮点数与定点数浮点数转换为定点数浮点数与定点数的相乘在quartusⅡ使用乘法器完成两个定点数相乘IP核的使用.v文件...
  • 定点数:小数点的位置固定不变 分为定点定点整数和定点小数1、定点小数(纯小数):小数点隐含固定在最高数据位的左边,所以整数位就是最高位用来表示符号位 计算机存储 1010111(第一位1符号位,表示负数) ...
  • 定点数表示与运算

    2020-07-17 12:51:36
    定点数表示与运算定点数的表示无符号数与有符号数的...通常约定二进制数的最高位为符号位。 有符号数的机器表示有原码、补码、反码、移码。 机器数的定点表示 1.定点小数 定点小数是纯小数,约定小数点位置在符号位之后
  • FPGA 定点数转化浮点数

    千次阅读 2018-10-15 15:14:08
    在此,主要介绍定点数转化单精度浮点类型 S最高符号(bit31),E指数(bit30~bit23),M尾数(bit22 ~ bit0) 示例1:0x0000_0011转化单精度浮点数,二进制表达32’b0000_0000_0000_000...
  • 定点数编程

    千次阅读 2018-07-01 22:20:35
    翻译自 Fixed Point Arithmetic on the ARM 翻译自 Fixed Point Arithmetic on the ARM 介绍 定点算法原理 指数变化 ...本应用笔记介绍了如何使用ARM C编译器和ARM或Thumb汇编器编写高效的定点算术...
  • 定点数与浮点数的相互转换

    万次阅读 2015-02-10 17:12:45
    最近要写段数字运算的程序,因为从FPGA获取到的是定点数,15位数,最高位bit14是符号位,bit13是整数位,后面13位是小数位; 而我的运算过程都是用的浮点数,通过一系列计算后,还需要将计算的结果以定点数的形式...
  • 定点数的加减法

    2019-10-03 18:50:27
    由于计算机的数有定点和浮点两种表示形式,因此相应有定点数的运算和浮点数的运算。本文将介绍计算机中定点数的加减法运算过程。 注意,理解本文的前提是要清楚知道顶点数的源码、反码和补码的含义,以及定点数在...
  • 计算机定点数和浮点数

    万次阅读 多人点赞 2017-08-19 21:57:24
    计算机数据有定点数和浮点数两种表达方式。 我们先来了解一下概念: (1)定点数:小数点固定在某个位置上的数据。 就好像 0.0000001 ,0.0001111; (2)浮点数:小数点位置可以浮动的数据。就像数学的 1222...
  • 定点数的表示和运算

    2020-10-08 16:54:56
    文章目录定点数的表示和运算定点数的表示有符号数和无符号数机器数定点表示机器数表示方法定点数的运算定点数移位运算原码定点数的加减法运算补码定点数加减法运算符号扩展溢出概念和判断方法定点数的乘法运算定点数...
  • 顾名思义定点数就是小数固定不变的数叫做定点数,也就是小数点是定在某个位置不变的数。 2、定点数的分类: (1)定点整数:定点整数的小数点后面没有其他的数值,即小数点定在了数的最后面 定点整数又分为...
  • 定点数的表示方法

    万次阅读 多人点赞 2018-06-15 13:24:28
    计算机数值的表示有两种形式,一是定点数(Fixed-point Number),二是浮点数(Floating-point Number)。 1.定点数的表示形式 定点数指小数点在数位置固定不变的数。定点数分为定点整数和定点小数,由于...
  • 1.定点数的表示1.1 无符号数定义:无符号数就是没有体现正负号的数(这意味着所有的无符号数实际上都是正数),整个机器字长的全部二进制数值,没有符号。以108D例,它对应的二进制数是 1101100,这实际上...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,971
精华内容 3,588
关键字:

定点数中最高位为什么