一种二进制数的双向移位方法及装置制造方法
【专利摘要】本发明公开了一种二进制数的双向移位方法及装置,将m位第一有符号二进制数拆分成至少两个m位第二有符号二进制数,并依次采用各个第二有符号二进制数对应的移位位数和移位方式对n位有符号二进制数进行移位处理,使对n位有符号二进制数的移位处理分两步或两步以上完成。采用本技术方案,不但可以得到所需的移位结果,而且当对位数相同的n位有符号二进制数做移位处理时,采用本方案所需遍历的移位方式要小于现有技术所需遍历的移位方式,由于移位方式的减少,可以有效降低数字芯片的布线难度、提高代码处理效率、还可避免因数字芯片所采用的时钟频率增加而导致的移位结果错误的缺陷。
【专利说明】一种二进制数的双向移位方法及装置
【技术领域】
[0001]本发明涉及数字信号处理【技术领域】,尤其涉及一种二进制数的双向移位方法和装置。
【背景技术】 [0002]在大多数字计算机、数字信号处理器件以及数字芯片中,数字和信号变量是用二进制数表示的。对于有符号二进制数来说,其最高位是符号位,最高位为‘0’时表示正数,最高位为‘I’时表示负数,其中,二进制数的表示方法有三种:原码表示法、反码表示法和补码表示法。对于正数来说,原码、反码和补码的表示是一样的,例如,十进制数+ 6使用5bits (比特位)表示的原码、反码和补码均是00110。对于负数来说,原码是符号位加绝对值,反码是符号位不变,其他所有的O变为1,I变为O ;补码是在反码的最低位上加1,例如:十进制数一 6使用5 b i t s表示的原码是10110,反码是11001,补码是11010。
[0003]数字处理技术中,移位处理是一种常见的功能,分为左移和右移两个方向。在计算机、器件和芯片中,通常使用补码表示法去表示一个有符号二进制数,对于一个补码表示形
式的N b i t s二进制有符号数X1^1 Xn — 2---X1 Xtl,将其左移I位的结
果为 Xn —I X n-3 X n-4---Χ1 Χ? 0,即是令 X n — ι X n — 2---X I
X ^的最高位即符号位不变且其他每I b i t位置提前I位(即将X n — 2去掉,末位用O补
充),将其右移I位的结果为Xt1 Xn-! Xn — 2---X2 X1,即是令Xt1 X
n —2---X1 Xd勺最高位即符号位不变且其他每I b i t位置退后I位(即Xq去
掉,次高位用符号位Xt1补充)。也就是说,每左移I位,相当于将数字乘以2,例如:00110(+6)左移I位后是01100 (+ 12),11010 (—6)左移I位后是10100 (― 12)。每右移I位,相当于将数字除以2,例如:00110 (+6)右移I位后是00011 (+ 3),11010 (一 6)右移I位后是11101 (- 3)。
[0004]但是由于字长的有限性,当左移位数太多,将数据增加的倍数太大时,有限的比特位(二进制位)将不能正确表示出移位的结果。例如,将00110 (+6)左移2位后是01000(+ 8),将11010 ( — 6)左移2位后是11000 ( — 8),都发生了数据溢出,结果产生错误。因此在移位时要考虑饱和截位,溢出后将数据置为绝对值“最大值”,例如,将00110 (+ 6)左移2位后是01111 (+ 15,最大正数),将11010 (—6)左移2位后是10000 (— 16,最小负数)。右移移位时不需要考虑数据溢出的问题。
[0005]对于数字芯片现场可编程门阵列(F ield—Progr a mm ableGate Arra y,F P G A),在基于F P G A实现二进制数移位的设计中,已知数
据X(Xn —i Xn — 2---X1 X J为二进制有符号数的补码表示形式,要求其按照
补码二进制数Am_i Am_2---A: A。的取值完成移位处理,即是当Am_ i A
m-2---A1 A。表不正数+A时,X向右移动I A I位;当Am—i Am—2---
A ι A。表示负数一 A时,X向左移动I A I位。其中取值范围为m <= I Og 2(n) + I。参见图1所示的常规移位情况示意图,假设m= 5,则A的取值范围为一16?+ 15,此时需要遍历A的各种取值,A的取值使得数据X的移位方式有32种,且对于左移输出后的数据Y还需要考虑数据溢出问题。
[0006]但是,在F P G A中,当移位的位数不断增加时,实现的难度将成几何倍数增加,具体表现为FPGA的布局布线难度增加,且因需要遍历各种移位情况导致算法运行效率降低,而且当F P G A时钟频率增加时,复杂的移位布线将可能使F P G A产生错误的移位结果。
【发明内容】
[0007]有鉴于此,本发明实施例的主要目的在于提供一种二进制数的双向移位方法和装置,通过减少移位情况,以实现降低数字芯片布线难度、提高代码处理效率、避免因时钟频率增加而导致的移位结果错误的目的。
[0008]为实现上述目的,本发明实施例提供了一种二进制数的双向移位方法,包括:
[0009]若m位第一有符号二进制数对应的第一有符号十进制数为负数且η位有符号二进制数左移k位后不会发生溢出,k为所述第一有符号十进制数的绝对值,则将m位第一有符号二进制数拆分成至少两个m位第二有符号二进制数,所述第一有符号二进制数等于所述至少两个第二有符号二进制数的和值;
[0010]将所述至少两个第二有符号二进制数分别转换为第二有符号十进制数,所述第二有符号十进制数的绝对值对应于移位位数,所述第二有符号十进制数的符号对应于移位方向,所述符号为正时所述移位方向为右,所述符号为负时所述移位方向为左;
[0011]从至少两个第二有符号十进制数中提取一个第二有符号十进制数,并按照提取的第二有符号十进制数对应的移位位数和移位方向对η位有符号二进制数进行移位处理;
[0012]从未被提取过的第二有符号十进制数中提取一个第二有符号十进制数,并按照提取的第二有符号十进制数对应的移位位数和移位方向对上一次移位处理后的η位有符号二进制数进行本次移位处理,继续执行所述从未被提取过的第二有符号十进制数中提取一个有符号十进制数的步骤,直到全部提取完毕为止;
[0013]其中,当所述本次移位处理的移位位数为P时,若本次移位方向为左且上次移位方向为右,则从上次向右移出的各个二进制位中的最高位开始取出P位且在不足P位时补
O,并将取出的P位填补到本次移位结束后的η位有符号二进制数的最低P位处;若本次移位方向为右且上次移位方向为左,则从上一次向左移出的各个二进制位中的最低位开始取出P位且在不足P位时补符号位,并将取出的P位填补到本次移位结束后的η位有符号二进制数中符号位后的最高P位处;
[0014]其中,m、η、k和P 均为正整数,m <= I O g 2 (η) + I。
[0015]优选地,在上述方法中,
[0016]若m位第一有符号二进制数对应的第一有符号十进制数为负数且η位有符号二进制数左移k位后会发生溢出,则当所述η位有符号二进制数的符号位为I时,将左移k位后的η位有符号二进制数置为最小负数,或,当所述η位有符号二进制数的符号位为O时,将左移k位后的η位有符号二进制数置为最大正数。
[0017]优选地,在上述方法中,所述将m位第一有符号二进制数拆分成至少两个m位第二有符号二进制数,具体包括:
[0018]将所述m位第一有符号二进制数的各个二进制位拆分成至少两个数据区间,所述数据区间中包括一个二进制位或多个二进制位;
[0019]保持所述数据区间内各个二进制位在所述m位第一有符号二进制数中的位置不变,并将除所述数据区间内各个二进制位以外的与所述m位第一有符号二进制数对应的其它二进制位补零,以得到m位第二有符号二进制数。
[0020]优选地,在上述方法中,所述将m位第一有符号二进制数拆分成至少两个m位第二有符号二进制数,具体包括:
[0021]分次从所述m位第一有符号二进制数中提取一个或多个二进制位,直到将所述m位第一有符号二进制数中的所有二进制位提取完为止;
[0022]对于每次提取的二进制位,保持提取的二进制位在所述m位第一有符号二进制数中的位置不变,并将除提取的二进制位以外的与所述m位第一有符号二进制数对应的其它二进制位补零,以得到m位第二有符号二进制数。
[0023]优选地,在上述方法中,
[0024]若所述至少两个第二有符号十进制数中存在一个符号为负的第二有符号十进制数,则最后提取所述符号为负的第二有符号十进制数。
[0025]本发明实施例还提供了一种二进制数的双向移位装置,包括:
[0026]拆分单元,用于若m位第一有符号二进制数对应的第一有符号十进制数为负数且η位有符号二进制数左移k位后不会发生溢出,k为所述第一有符号十进制数的绝对值,则将m位第一有符号二进制数拆分成至少两个m位第二有符号二进制数,所述第一有符号二进制数等于所述至少两个第二有符号二进制数的和值;
[0027]转换单元,用于将所述至少两个第二有符号二进制数分别转换为第二有符号十进制数,所述第二有符号十进制数的绝对值对应于移位位数,所述第二有符号十进制数的符号对应于移位方向,所述符号为正时所述移位方向为右,所述符号为负时所述移位方向为左;
[0028]第一提取移位单元,用于从至少两个第二有符号十进制数中提取一个第二有符号十进制数,并按照提取的第二有符号十进制数对应的移位位数和移位方向对η位有符号二进制数进行移位处理;
[0029]第二提取移位单元,用于从未被提取过的第二有符号十进制数中提取一个第二有符号十进制数,并按照提取的第二有符号十进制数对应的移位位数和移位方向对上一次移位处理后的η位有符号二进制数进行本次移位处理,继续利用所述第二提取移位单元执行所述从未被提取过的第二有符号十进制数中提取一个有符号十进制数的步骤,直到全部提取完毕为止;
[0030]其中,当所述本次移位处理的移位位数为P时,若本次移位方向为左且上次移位方向为右,则从上次向右移出的各个二进制位中的最高位开始取出P位且在不足P位时补
O,并将取出的P位填补到本次移位结束后的η位有符号二进制数的最低P位处;若本次移位方向为右且上次移位方向为左,则从上一次向左移出的各个二进制位中的最低位开始取出P位且在不足P位时补符号位,并将取出的P位填补到本次移位结束后的η位有符号二进制数中符号位后的最高P位处;[0031]其中,m、n和p 均为整数,m <= I Og 2 (η) + I。
[0032]优选地,上述装置还包括:
[0033]溢出置数单元,用于若m位第一有符号二进制数对应的第一有符号十进制数为负数且η位有符号二进制数左移k位后会发生溢出,则当所述η位有符号二进制数的符号位为I时,将左移k位后的η位有符号二进制数置为最小负数,或,当所述η位有符号二进制数的符号位为O时,将左移k位后的η位有符号二进制数置为最大正数。
[0034]优选地,在上述装置中,所述拆分单元,具体包括:
[0035]第一拆分子单元,用于将所述m位第一有符号二进制数的各个二进制位拆分成至少两个数据区间,所述数据区间中包括一个二进制位或多个二进制位;
[0036]第一保持填补子单元,用于保持所述数据区间内各个二进制位在所述m位第一有符号二进制数中的位置不变,并将除所述数据区间内各个二进制位以外的与所述m位第一有符号二进制数对应的其它二进制位补零,以得到m位第二有符号二进制数。
[0037]优选地,在上述装置中,所述拆分单元,具体包括:
[0038]第二拆分子单元,用于分次从所述m位第一有符号二进制数中提取一个或多个二进制位,直到将所述m位第一有符号二进制数中的所有二进制位提取完为止;
[0039]第二保持填补子单元,用于对于每次提取的二进制位,保持提取的二进制位在所述m位第一有符号二进制数中的位置不变,并将除提取的二进制位以外的与所述m位第一有符号二进制数对应的其它二进制位补零,以得到m位第二有符号二进制数。
[0040]优选地,上装置还包括:
[0041]判断单元,用于判断所述至少两个第二有符号十进制数中是否存在一个符号为负的第二有符号十进制数;
[0042]所述第一提取移位单元,具体包括:
[0043]正数提取子单元,用于在所述判断单元判断得到的存在一个符号为负的第二有符号十进制数时,从所述至少两个第二有符号十进制数中提取一个符号为正的第二有符号十进制数;
[0044]第一移位子单元,用于按照所述符号为正的第二有符号十进制数对应的移位位数和移位方向对η位有符号二进制数进行移位处理;
[0045]所述第二提取移位单元,具体包括:
[0046]负数提取子单元,用于最后从未被提取过的第二有符号十进制数中提取所述符号为负的第二有符号十进制数;
[0047]第二移位子单元,用于按照所述符号为负的第二有符号十进制数对应的移位位数和移位方向对上一次移位处理后的η位有符号二进制数进行本次移位处理。
[0048]本发明实施例提供的二进制数的双向移位方法和装置,将m位第一有符号二进制数拆分成至少两个m位第二有符号二进制数,并依次采用各个第二有符号二进制数对应的移位位数和移位方式对η位有符号二进制数进行移位处理,使对η位有符号二进制数的移位处理分两步或两步以上完成。采用本技术方案,不但可以得到所需的移位结果,而且当对位数相同的有符号二进制数做移位处理时,采用本方案所需遍历的移位方式要小于现有技术所需遍历的移位方式,由于移位方式的减少,可以有效降低数字芯片的布线难度、提高代码处理效率、还可避免因数字芯片所采用的时钟频率增加而导致的移位结果错误的缺陷。【专利附图】
【附图说明】
[0049]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0050]图1为现有的常规移位情况示意图;
[0051]图2为本发明实施例二进制数的双向移位方法的流程示意图;
[0052]图3为本发明实施例第一移位示意图;
[0053]图4为本发明实施例第二移位示意图;
[0054]图5为本发明实施例二进制数的双向移位装置的结构示意图。
【具体实施方式】
[0055]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0056]在介绍本发明实施 例前,首先介绍两个有符号二进制数在本发明中的作用:
[0057]η位有符号二进制数:是需要进行移位处理的二进制数。
[0058]m位第一有符号二进制数:该二进制数的不同取值,对应于一种η位有符号二进制数的移位方式,即定义了 η位有符号二进制数的移位位数P和移位方向。m位第一有符号二进制数对应的十进制数的绝对值为所述移位位数P ;1^1位第一有符号二进制数对应的十进制数为正时,移位方向为右;m位第一有符号二进制数对应的十进制数为负时,移位方向为左。
[0059]其中,m、η和 P 均为正数,m <= I O g 2 (η ) + I。
[0060]
[0061]参见图2,为本发明实施例提供的二进制数的双向移位方法的流程示意图,实现该方法的步骤包括:
[0062]步骤201:判断m位第一有符号二进制数对应的第一有符号十进制数是否为负数,如果是,则执行步骤202,如果否,则执行步骤204。
[0063]步骤202:判断η位有符号二进制数左移k位后是否会发生溢出,如果是,则执行步骤203,如果否,则执行步骤204。
[0064]其中,k为所述第一有符号十进制数的绝对值。
[0065]其中,可采用下述方法实现步骤202:
[0066]判断η位有符号二进制数的高K+ I位是否全部为I或是否全部为0,如果是,则可确定η位有符号二进制数左移k位后不会发生溢出,如果否,则可确定η位有符号二进制数左移k位后会发生溢出。
[0067]步骤203:当所述η位有符号二进制数的符号位为I时,将左移k位后的η位有符号二进制数置为最小负数,或,当所述η位有符号二进制数的符号位为O时,将左移k位后的η位有符号二进制数置为最大正数,执行步骤209。
[0068]步骤204:将m位第一有符号二进制数拆分成至少两个m位第二有符号二进制数,所述第一有符号二进制数等于所述至少两个第二有符号二进制数的和值。
[0069]在本发明实施例中,所述m位第一有符号二进制数及所述m位第二有符号二进制数均为补码的表示形式,由于补码的提出,使得所有有符号二进制数间的减法计算也都转换成了加法计算。也就是说,任意一个补码表示的有符号二进制数,均可以转换成任意个补码表示的有符号二进制数相加。
[0070]设m位第一有符号二进制数为:A = Am—ι Am_2---Ai A。。在
步骤201中,可采用下述两种方式中的一种将m位第一有符号二进制数拆分成多个m位第二有符号二进制数:
[0071]方式一:
[0072]将所述m位第一有符号二进制数的各个二进制位拆分成至少两个数据区间,所述数据区间中包括一个二进制位或多个二进制位;保持所述数据区间内各个二进制位在所述m位第一有符号二进制数中的位置不变,并将除所述数据区间内各个二进制位以外的与所述m位第一有符号二进制数对应的其它二进制位补零,以得到m位第二有符号二进制数。
[0073]为了便于说明方式一的拆分方式,下面举例说明:
[0074]例1:假设m= 5,则m位第一有符号二进制数为5位有符号二进制数A = A4 A3 A2 A1 A ^,将5位有符号二进制数的各个二进制位拆分成至少两个数据区间,即可以为A4人3和人2 A1 A ^。保持A4 A3在5位有符号二进制数中的位置不变,并将除A4 A3以外的与所述5位有符号二进制数对应的其它二进制位补零;同样的,保持八2 A1 A ^在5位有符号二进制数中的位置不变,并将除人2 A1 A ^以外的与所述5位有符号二进制数对应的其它二进制位补零。这样将A = A4 A3 A2 A i进行拆分后便得到了另外两个5位有符号二进制数B =B4B3B2B1B0=
O O A2 A1 AJC = C4 C3 C2 C1 C0 = A4A3 O O O。需要注意的是,A = B + C,即拆分后的两个5位有符号二进制数之和(B +
C)等于拆分前的一个5位有符号二进制数A。
[0075]方式二:
[0076]分次从所述m位第一有符号二进制数中提取一个或多个二进制位,直到将所述m位第一有符号二进制数中的所有二进制位提取完为止;对于每次提取的二进制位,保持提取的二进制位在所述m位第一有符号二进制数中的位置不变,并将除提取的二进制位以外的与所述m位第一有符号二进制数对应的其它二进制位补零,以得到m位第二有符号二进制数。
[0077]为了便于说明方式二的拆分方式,下面举例说明:
[0078]例2:假设m= 5,则 m位第一有符号二进制数为5位有符号二进制数A = A4 a 3 A 2 Al人。,可以先从人4 A3 A 2 Al A Q中提取A 4和人2,再从A 4 A3 A 2 Al A。中提取A 3、A I和A。。对于A 4和人2,保持其在A 4 A3 A 2 AiA0中的位置不变,并将其它3位补0,这样便得到了一个5位有符号二进制数B = B 4
B 3 B2 B1 B。= A4O A2 00 ;同样的,对于 A 3、A JPA。,保持其在 A 4A3 A2 A1 A0中的位置不变,并将其它3位补O,这样便得到了另一个5位有符号二进制数C = C 4 C 3 C 2 Cl CO = OA3 OAi A。。需要注意的是,A = B + C,即拆分后的两个5位有符号二进制数之和(B + C )等于拆分前的一个5位有符号二进制数A。
[0079]当然,本发明实施例不限于上述例I或例2中给出的拆分方式,其任何变形均为本发明实施例所保护的内容,在此不在一一赘述。
[0080]需要说明的是,对于m位第一有符号二进制数的位数较少时,譬如5位,将m位第一有符号二进制数拆分成两个m位第二有符号二进制数即可;对于m位第一有符号二进制数的位数较多时,将m位第一有符号二进制数拆分成3或4或5个m位第二有符号二进制数即可。
[0081]步骤205:将所述至少两个第二有符号二进制数分别转换为第二有符号十进制数,所述第二有符号十进制数的绝对值对应于移位位数,所述第二有符号十进制数的符号对应于移位方向,所述符号为正时所述移位方向为右,所述符号为负时所述移位方向为左。
[0082]步骤206:从至少两个第二有符号十进制数中提取一个第二有符号十进制数,并按照提取的第二有符号十进制数对应的移位位数和移位方向对η位有符号二进制数进行移位处理。
[0083]步骤207:从未被提取过的第二有符号十进制数中提取一个第二有符号十进制数,并按照提取的第二有符号十进制数对应的移位位数和移位方向对上一次移位处理后的η位有符号二进制数进行本次移位处理。
[0084]其中,η位有符号二进制数为补码的表示形式。
[0085]为了保证移位结果的正确性,在每次移位处理过程中,为了不产生由于向右移位导视低位数据丢失,而下次再向左移位不能恢复之前移出的数据的问题,或是不产生由于向左移位导视高位数据丢失,而下次再向右移位不能恢复之前移出的数据的问题。本发明实施例在每次移位时需要做以下处理:
[0086]当所述本次移位处理的移位位数为P时,若本次移位方向为左且上次移位方向为右,则从上次向右移出的各个二进制位中的最高位开始取出P位且在不足P位时补0,并将取出的P位填补到本次移位结束后的η位有符号二进制数的最低P位处;若本次移位方向为右且上次移位方向为左,则从上一次向左移出的各个二进制位中的最低位开始取出P位且在不足P位时补符号位,并将取出的P位填补到本次移位结束后的η位有符号二进制数中符号位后的最高P位处。其中,m、η、k和P均为正整数,m <= I O g 2 (η ) +
1
[0087]步骤208:判断是否还有未被提取过的第二有符号十进制数,如果是,则执行步骤207,以继续执行所述从未被提取过的第二有符号十进制数中提取一个第二有符号十进制数的步骤,直到全部提取完毕为止;如果否,则执行步骤209。
[0088]步骤209:结束流程。
[0089]为了便于说明步骤202至206,下面举例说明:
[0090]对于步骤201中方式一(例I)的拆分方式,B = B4 B 3 B 2 BI BO = O O A 2 A I A O对应的有符号十进制数的取值范围是O?+ 7,其中,O代表不移位,+ I~+ 7分别代表向右移动1、2、……7位;C = C4 C3 C 2 C1Ctl = A4 A3 O O O对应的有符号十进制数的取值包括:0、+8、一 8和一 16,其中,O代表不移位,+ 8代表向右移动8位,一8代表向左移动8位,+ 16代表向右移动16位。在对η位有符号二进制数进行移位处理时,可先按照B对应的有符号十进制数进行移位,再按照C对应的有符号十进制数进行移位(参见图3所示的第一移位示意图);或者是先按照C对应的有符号十进制数进行移位,再按照B对应的有符号十进制数进行移位。[0091]对于步骤201中方式二 (例2)的拆分方式,B = B4 B3 B 2 B1 B。
=A4O A 2 00对应的有符号十进制数的取值包括:0、+4、一 16和一 12,其中,O代表不移位,+ 4代表向右移动4位,-16代表向左移动16位,-12代表向左移动12位;C
=C 4 C 3 C 2 Cl CO = OA3 OA1 A j寸应的有符号十进制数的取值包括:0~+ 3和+ 8~+ 11,其中,O代表不移位,+ I~+ 3分别代表向右移动1、2、3位,+ 8~+ 11分别代表向右移动8、9、10、11位。在对η位有符号二进制数进行移位处理时,可先按照B对应的有符号十进制数进行移位,再按照C对应的有符号十进制数进行移位(参见图4所示的第二移位示意图);或者是先按照C对应的有符号十进制数进行移位,再按照B对应的有符号十进制数进行移位。
[0092]可见,本发明实施例将5位有符号二进制数拆A分成了两个5位有符号二进制数B和C,B和C对应的移位方式共12种(参见图3和图4),而在现有技术中(参见图1),移位方式共32种,所以,与现有移位方式的数量相比,采用本发明实施例提供的方法进行移位,只需要提供12种移位方式,便可实现对η位有符号二进制数的移位处理。由于移位方式的减少,可降低F P G A的布局复杂度,提高算法运行效率,并在F P G A时钟频率增加时,提闻闻速移位处理下的稳定性。
[0093]进一步的,若所述至少两个第二有符号十进制数中存在一个符号为负的第二有符号十进制数,则最后提取所述符号为负的第二有符号十进制数。
[0094]为了更方便的了解本发明实施例,下面具体举例说明:
[0095]假设需要进行移位的η (η = 16)位有符号二进制数为:X = X15X14 ---Xi X C1,若需要将X向左移动2位,则m(m= 5)位第一有符号二进制数为:
A =11110其中,X 、A均采用补码表示,A对应的有符号十进制数为一 2。基于此,移位处理流程如下:
[0096]首先,判断X = X15X14---X1 X。向左移2位是否会发生溢出,
即判断X的高3位是否全部为I或是否全部为0,如果否,则可确定X左移2位后会发生溢出,此时将左移2位后的X置为最小负数(符号位为I时)或最大正数(符号位为O时);如果是,则可确定X左移2位后不会发生溢出,接下来可按照以下其中一种移位处理流程实现对X的移位:
[0097]第一种移位处理流程:
[0098](I)、可将A拆分成两个5位有符号二进制数。若采用步骤201中的方式一对A进行拆分,则可拆分为:B =00110和C = 11000。
[0099](2)、将B和C转换为有符号十进制数,分别为B =6和C =-8? B =6表示向右移动6位,C =一 8表示向左移动8位。
[0100](3)、下面将A进行移位处理:[0101]第一种方式是,先将X向右移动6位得到Z= X15X15 X15 X15 X15X 15 X 15 X 14 X 13 X 12 X π X 10 X9 X8X7 X6 ,再将 Z 向左移动 8 位得至 IJY = X15 X12 X11 X10 X9 X8X7 X6 X 5 X 4 X 3 X2X1 x0oo。
[0102]第二种方式是,先将X向左移动8位得到Z= X15 X6 X5 X4 X3 X2 X ! X。00000000 ,再将 Z 向右移动 6 位得到 Y= X15 X12 X11 Xltl XgX 8 X 7 X6 X5 X4 X3 X 2 X 1 X 000。
[0103]第二种移位处理流程:
[0104](I)、可将A拆分成两个5位有符号二进制数。若采用步骤201中的方式二对A进行拆分,则可拆分为:B =10100和C =01010。
[0105](2)、将B和C转换为有符号十进制数,分别为B =—12和C = 10。B = —12表示向左移动12位,C = 10表示向右移动10位。
[0106](3)、下面将A进行移位处理:
[0107]第一种方式是,先将X向右移动10位得到Z= X15X15 X15 X15 X15X15 X15 X15 X15 X15 X15X14 X13 X12 X11 X10 ,再将Z 向左移动 12位得到 Y = X15 X12 X11 X10 X9 X8X7 X6 X5 X4 X3 X2X1 X000。
[0108]第二种方式是,先将X向左移动12位得到Z = X15 X2X1 Xci000000000000,再将 Z 向右移动 10 位得到 Y= X 15 X 12 X n X 10 X9 X8X7X6 X 5 X4 X 3 X2Xi x0oo。
[0109]本发明实施例提供的二进制数的双向移位方法,将m位第一有符号二进制数拆分成至少两个m位第二有符号二进制数,并依次采用各个第二有符号二进制数对应的移位位数和移位方式对η位有符号二进制数进行移位处理,使对η位有符号二进制数的移位处理分两步或两步以上完成。采用本技术方案,不但可以得到所需的移位结果,而且当对位数相同的η位有符号二进制数做移位处理时,采用本方案所需遍历的移位方式要小于现有技术所需遍历的移位方式,由于移位方式的减少,可以有效降低数字芯片的布线难度、提高代码处理效率、还可避免因数字芯片所采用的时钟频率增加而导致的移位结果错误的缺陷。
[0110]
[0111]参见图5所示的二进制数的双向移位装置的结构示意图,该装置500包括:
[0112]拆分单元501,用于若m位第一有符号二进制数对应的第一有符号十进制数为负数且η位有符号二进制数左移k位后不会发生溢出,k为所述第一有符号十进制数的绝对值,则将m位第一有符号二进制数拆分成至少两个m位第二有符号二进制数,所述第一有符号二进制数等于所述至少两个第二有符号二进制数的和值;
[0113]转换单元502,用于将所述至少两个第二有符号二进制数分别转换为第二有符号十进制数,所述第二有符号十进制数的绝对值对应于移位位数,所述第二有符号十进制数的符号对应于移位方向,所述符号为正时所述移位方向为右,所述符号为负时所述移位方向为左;
[0114]第一提取移位单元503,用于从至少两个第二有符号十进制数中提取一个第二有符号十进制数,并按照提取的第二有符号十进制数对应的移位位数和移位方向对η位有符号二进制数进行移位处理;
[0115]第二提取移位单元504,用于从未被提取过的第二有符号十进制数中提取一个第二有符号十进制数,并按照提取的第二有符号十进制数对应的移位位数和移位方向对上一次移位处理后的η位有符号二进制数进行本次移位处理,继续利用所述第二提取移位单元执行所述从未被提取过的第二有符号十进制数中提取一个有符号十进制数的步骤,直到全部提取完毕为止;
[0116]其中,其中,当所述本次移位处理的移位位数为P时,若本次移位方向为左且上次移位方向为右,则从上次向右移出的各个二进制位中的最高位开始取出P位且在不足P位时补0,并将取出的P位填补到本次移位结束后的η位有符号二进制数的最低P位处;若本次移位方向为右且上次移位方向为左,则从上一次向左移出的各个二进制位中的最低位开始取出P位且在不足P位时补符号位,并将取出的P位填补到本次移位结束后的η位有符号二进制数中符号位后的最高P位处;
[0117]其中,m、η、k和P 均为正整数,m <= I O g 2 (η) + I。
[0118]进一步的,所述装置还包括:
[0119]溢出置数单元,用于若m位第一有符号二进制数对应的第一有符号十进制数为负数且η位有符号二进制数左移k位后会发生溢出,则当所述η位有符号二进制数的符号位为I时,将左移k位后的η位有符号二进制数置为最小负数,或,当所述η位有符号二进制数的符号位为O时,将左移k位后的η位有符号二进制数置为最大正数。
[0120]优选地,所述拆分单元501,具体包括:
[0121]第一拆分子单元,用于将所述m位第一有符号二进制数的各个二进制位拆分成至少两个数据区间,所述数据区间中包括一个二进制位或多个二进制位;
[0122]第一保持填补子单元,用于保持所述数据区间内各个二进制位在所述m位第一有符号二进制数中的位置不变,并将除所述数据区间内各个二进制位以外的与所述m位第一有符号二进制数对应的其它二进制位补零,以得到m位第二有符号二进制数。
[0123]或,所述拆分单元501,具体包括:
[0124]第二拆分子单元,用于分次从所述m位第一有符号二进制数中提取一个或多个二进制位,直到将所述m位第一有符号二进制数中的所有二进制位提取完为止;
[0125]第二保持填补子单元,用于对于每次提取的二进制位,保持提取的二进制位在所述m位第一有符号二进制数中的位置不变,并将除提取的二进制位以外的与所述m位第一有符号二进制数对应的其它二进制位补零,以得到m位第二有符号二进制数。
[0126]此外,所述装置500还包括:
[0127]判断单元,用于判断所述至少两个第二有符号十进制数中是否存在一个符号为负的第二有符号十进制数;
[0128]所述第一提取移位单元,具体包括:
[0129]正数提取子单元,用于在所述判断单元判断得到的存在一个符号为负的第二有符号十进制数时,从所述至少两个第二有符号十进制数中提取一个符号为正的第二有符号十进制数;
[0130]第一移位子单元,用于按照所述符号为正的第二有符号十进制数对应的移位位数和移位方向对η位有符号二进制数进行移位处理;[0131]所述第二提取移位单元,具体包括:
[0132]负数提取子单元,用于最后从未被提取过的第二有符号十进制数中提取所述符号为负的第二有符号十进制数;
[0133]第二移位子单元,用于按照所述符号为负的第二有符号十进制数对应的移位位数和移位方向对上一次移位处理后的η位有符号二进制数进行本次移位处理。
[0134]本发明实施例提供的二进制数的双向移位装置,将m位第一有符号二进制数拆分成至少两个m位第二有符号二进制数,并依次采用各个第二有符号二进制数对应的移位位数和移位方式对η位有符号二进制数进行移位处理,使对η位有符号二进制数的移位处理分两步或两步以上完成。采用本技术方案,不但可以得到所需的移位结果,而且当对位数相同的有符号二进制数做移位处理时,采用本方案所需遍历的移位方式要小于现有技术所需遍历的移位方式,由于移位方式的减少,可以有效降低数字芯片的布线难度、提高代码处理效率、还可避免因数字芯片所采用的时钟频率增加而导致的移位结果错误的缺陷。
[0135]需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0136]对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
【权利要求】
1.一种二进制数的双向移位方法,其特征在于,包括: 若m位第一有符号二进制数对应的第一有符号十进制数为负数且η位有符号二进制数左移k位后不会发生溢出,k为所述第一有符号十进制数的绝对值,则将m位第一有符号二进制数拆分成至少两个m位第二有符号二进制数,所述第一有符号二进制数等于所述至少两个第二有符号二进制数的和值; 将所述至少两个第二有符号二进制数分别转换为第二有符号十进制数,所述第二有符号十进制数的绝对值对应于移位位数,所述第二有符号十进制数的符号对应于移位方向,所述符号为正时所述移位方向为右,所述符号为负时所述移位方向为左; 从至少两个第二有符号十进制数中提取一个第二有符号十进制数,并按照提取的第二有符号十进制数对应的移位位数和移位方向对η位有符号二进制数进行移位处理; 从未被提取过的第二有符号十进制数中提取一个第二有符号十进制数,并按照提取的第二有符号十进制数对应的移位位数和移位方向对上一次移位处理后的η位有符号二进制数进行本次移位处理,继续执行所述从未被提取过的第二有符号十进制数中提取一个有符号十进制数的步骤,直到全部提取完毕为止; 其中,当所述本次移位处理的移位位数为P时,若本次移位方向为左且上次移位方向为右,则从上次向右移出的各个二进制位中的最高位开始取出P位且在不足P位时补O,并将取出的P位填补到本次移位结束后的η位有符号二进制数的最低P位处;若本次移位方向为右且上次移位方向为左,则从上一次向左移出的各个二进制位中的最低位开始取出P位且在不足P位时补符号位,并将取出的P位填补到本次移位结束后的η位有符号二进制数中符号位后的最高P位处; 其中,m、η、k和P均为正整数,m <= I O g 2 (η) + I。
2.根据权利要求1所述的方法,其特征在于, 若m位第一有符号二进制数对应的第一有符号十进制数为负数且η位有符号二进制数左移k位后会发生溢出,则当所述η位有符号二进制数的符号位为I时,将左移k位后的η位有符号二进制数置为最小负数,或,当所述η位有符号二进制数的符号位为O时,将左移k位后的η位有符号二进制数置为最大正数。
3.根据权利要求1所述的方法,其特征在于,所述将m位第一有符号二进制数拆分成至少两个m位第二有符号二进制数,具体包括: 将所述m位第一有符号二进制数的各个二进制位拆分成至少两个数据区间,所述数据区间中包括一个二进制位或多个二进制位; 保持所述数据区间内各个二进制位在所述m位第一有符号二进制数中的位置不变,并将除所述数据区间内各个二进制位以外的与所述m位第一有符号二进制数对应的其它二进制位补零,以得到m位第二有符号二进制数。
4.根据权利要求1所述的方法,其特征在于,所述将m位第一有符号二进制数拆分成至少两个m位第二有符号二进制数,具体包括: 分次从所述m位第一有符号二进制数中提取一个或多个二进制位,直到将所述m位第一有符号二进制数中的所有二进制位提取完为止; 对于每次提取的二进制位,保持提取的二进制位在所述m位第一有符号二进制数中的位置不变,并将除提取的二进制位以外的与所述m位第一有符号二进制数对应的其它二进制位补零,以得到m位第二有符号二进制数。
5.根据权利要求1至4任一项所述的方法,其特征在于, 若所述至少两个第二有符号十进制数中存在一个符号为负的第二有符号十进制数,则最后提取所述符号为负的第二有符号十进制数。
6.一种二进制数的双向移位装置,其特征在于,包括: 拆分单元,用于若m位第一有符号二进制数对应的第一有符号十进制数为负数且η位有符号二进制数左移k位后不会发生溢出,k为所述第一有符号十进制数的绝对值,则将m位第一有符号二进制数拆分成至少两个m位第二有符号二进制数,所述第一有符号二进制数等于所述至少两个第二有符号二进制数的和值; 转换单元,用于将所述至少两个第二有符号二进制数分别转换为第二有符号十进制数,所述第二有符号十进制数的绝对值对应于移位位数,所述第二有符号十进制数的符号对应于移位方向,所述符号为正时所述移位方向为右,所述符号为负时所述移位方向为左; 第一提取移位单元,用于从至少两个第二有符号十进制数中提取一个第二有符号十进制数,并按照提取的第二有符号十进制数对应的移位位数和移位方向对η位有符号二进制数进行移位处理; 第二提取移位单元,用于从未被提取过的第二有符号十进制数中提取一个第二有符号十进制数,并按照提取的第二有符号十进制数对应的移位位数和移位方向对上一次移位处理后的η位有符号二进制数进行本次移位处理,继续利用所述第二提取移位单元执行所述从未被提取过的第二有符号十进制数中提取一个有符号十进制数的步骤,直到全部提取完毕为止; 其中,当所述本次移位处理的移位位数为P时,若本次移位方向为左且上次移位方向为右,则从上次向右移出的各`个二进制位中的最高位开始取出P位且在不足P位时补O,并将取出的P位填补到本次移位结束后的η位有符号二进制数的最低P位处;若本次移位方向为右且上次移位方向为左,则从上一次向左移出的各个二进制位中的最低位开始取出P位且在不足P位时补符号位,并将取出的P位填补到本次移位结束后的η位有符号二进制数中符号位后的最高P位处; 其中,m、η和P均为整数,m <= I O g 2 (η) + I。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括: 溢出置数单元,用于若m位第一有符号二进制数对应的第一有符号十进制数为负数且η位有符号二进制数左移k位后会发生溢出,则当所述η位有符号二进制数的符号位为I时,将左移k位后的η位有符号二进制数置为最小负数,或,当所述η位有符号二进制数的符号位为O时,将左移k位后的η位有符号二进制数置为最大正数。
8.根据权利要求6所述的装置,其特征在于,所述拆分单元,具体包括: 第一拆分子单元,用于将所述m位第一有符号二进制数的各个二进制位拆分成至少两个数据区间,所述数据区间中包括一个二进制位或多个二进制位; 第一保持填补子单元,用于保持所述数据区间内各个二进制位在所述m位第一有符号二进制数中的位置不变,并将除所述数据区间内各个二进制位以外的与所述m位第一有符号二进制数对应的其它二进制位补零,以得到m位第二有符号二进制数。
9.根据权利要求6所述的装置,其特征在于,所述拆分单元,具体包括: 第二拆分子单元,用于分次从所述m位第一有符号二进制数中提取一个或多个二进制位,直到将所述m位第一有符号二进制数中的所有二进制位提取完为止; 第二保持填补子单元,用于对于每次提取的二进制位,保持提取的二进制位在所述m位第一有符号二进制数中的位置不变,并将除提取的二进制位以外的与所述m位第一有符号二进制数对应的其它二进制位补零,以得到m位第二有符号二进制数。
10.根据权利要求6至9任一项所述的装置,其特征在于,所述装置还包括: 判断单元,用于判断所述至少两个第二有符号十进制数中是否存在一个符号为负的第二有符号十进制数; 所述第一提取移位单元,具体包括: 正数提取子单元,用于在所述判断单元判断得到的存在一个符号为负的第二有符号十进制数时,从所述至少两个第二有符号十进制数中提取一个符号为正的第二有符号十进制数; 第一移位子单元,用于按照所述符号为正的第二有符号十进制数对应的移位位数和移位方向对η位有符号二进制数进行移位处理; 所述第二提取移位单元,具体包括: 负数提取子单元,用于最后从未被提取过的第二有符号十进制数中提取所述符号为负的第二有符号十进制数; 第二移位子单元,用于按照所述符号为负的第二有符号十进制数对应的移位位数和移位方向对上一次移位处理后的η位有符号二进制数进行本次移位处理。
【文档编号】G06F5/01GK103677731SQ201310680553
【公开日】2014年3月26日 申请日期:2013年12月12日 优先权日:2013年12月12日
【发明者】杜东振, 陈印锋, 朱宇霞 申请人:北京北方烽火科技有限公司