减少二进制字中“1”值位数 的系统、方法和程序产品 本发明涉及数据处理系统、方法和计算机程序产品,特别是用于处理二进制字的数据处理系统、方法和计算机程序产品。
在数据处理系统中,通常正数能由多种方法表示,但是普通数据处理硬件一般将数表示为二进制字,即具有位“1”或“0”的字。以这种方式在硬件中表示的数据会影响计算速度,例如,当在逻辑运算器,例如加法器、乘法器、比较器及类似电路中利用这种表示时会影响计算速度。例如,在乘法运算中位值“1”与位值“0”有不同的作用效果。两个8位二进制数01001010和00000101相乘时,乘法运算如下各行:
其中对在乘数00000101中具有二进制“1”值的每位进行加运算。通常在乘数中有更多位具二进制“1”值,那就要完成较大次数的加。相应地,乘法的效率取决于在乘数中具有二进制“1”值的位的数目。
经以上简述,本发明的目的是提供以能提高运算操作效率的形式表示二进制数的系统、方法和计算机程序产品。
在根据本发明的系统,方法和计算机程序产品中具备这种和其它目的、特点和优点,其中确定第1和第2二进制字,该第1和第2二进制字表示一具有预定位数的第3二进制字,该预定位数地范围是从最低有效位到最高有效位,该第1和第2二进制字的每一个都包括比第3二进制字包含的要少的具有二进制值“1”的位数。这样,该第1和第2可以代替第3二进制字用于计算操作,以便更有效地执行计算操作。
特别是,根据本发明,在一数据处理系统中是通过存贮与第3二进制字相同的第1字和存贮具有预定数目的零位来确定表示具有预定位数的第3二进制字的第1和第2二进制字。在第3二进制字的最低有效位开始,在第3二进制字中检索具有二进制“1”值的连续幂次位的对。对于具有二进制字中的二进制“1”值的连续幂次位对,将第1和第2字的每一个增加2连续幂次 位对的最低幂次。对于在具有二进制“1”值的第3二进制字中的第2连续幂次位对,最好将第1和第2字的每一个增加2连续幂次位对的最低幂次。从而提供一种用于确定包含具有二进制“1”值的数目要比第3二进制字包含的要少的第1和第2二进制字的迭代技术。
用于确定表示第3二进制字的第1和第2二进制字的一数据处理系统包括:第一存贮装置,用于存贮具有预定位数的第1二进制字;和第二存贮装置,用于存贮具有预定位数的第2二进制字;该系统还包括:能将存贮的第1二进制字置成第3二进制字和将存贮的第2二进制字置成零的装置;检索装置,用于在第3二进制字的最低有效位开始,对在第3二进制字中具有二进制“1”值的连续幂次位对进行检索;响应于第一和第二存贮装置和响应于检索装置,以便对第1和第2二进制字的每一个进行增值的装置,用于对于该第3二进制字中具有二进制“1”值的连续幂次位对,将第1和第2二进制字的每一个增加2连续幂次位对的最低幂次。
根据本发明的计算机程序产品包括其内具有计算机可读程序代码装置的计算机可读存贮介质,用于确定表示具有一预定位数的第3二进制字的第1和第2二进制字,该预定位数的范围从最低有效位到最高有效位,该第1和第2二进制字具有的二进制1”值的位数比第3二进制字的少。该计算机可读程序代码装置包括:用于存贮与第3二进制字相同的第1字的第一计算机可读程序代码装置和用于存贮具有预定位数的零位的第2字的第二计算机可读程序代码装置;用于检索的第三计算机可读程序代码装置,该装置从第3二进制字的最低有效位开始在第3二进制字中检索具有二进制“1”值的连续幂次位对;对第1和第2二进制字的每一个进行增值的第四计算机可读程序代码装置,用于响应于第一、第二和第三计算机可读程序代码装置,对于第3二进制字中具有二进制“1”值的连续幂次位对,将第1和第2字的每一个增加2连续幂次位对的最低幂次。从而提供了利用减少的具有二进制“1”值的位数表示一二进制字的系统,方法和程序产品。
已经陈述了本发明的某些目的和优点,参照附图及以下详细描述将会更全面理解其它优点。附图中:
图1是根据本发明的用于确定表示第3二进制字的第1和第2二进制字的流程图。
现在参照附图更全面地描述本发明,附图所示是本发明的实施例。然而该发明可以许多的不同形式实施,而不应将所陈述实施例理解为是对本发明的限制。这些实施例是用于完全彻底地披露本发明并使本技术领域的技术人员了解本发明的范围。在图中类似序号标志着类似单元。
对于M个位的字X来说,具有二进制“1”值的最多位数是M。如果假设X为正数,并由2的补码格式表示,则最高有效位一般具有二进制“0”值。
表示正数的二进制字A、B和X可由2幂次和加以定义:
A=aM-12M-1+aM-22M-2+…+a0 ……
B=bM-12M-1+bM-22M-2+…+b0 ……
X=xM-12M-1+xM-22M-2+…+x0 ……
对于以2的补码格式表示的正数,每个字的最高有效位是零,即xm-1=am-1=bm-1=0。
二进制字X可以表示为:
X=a-b(A>0,B>0,X>0,A>X,A>B)
所以,可以用两个二进制字A和B的差表示X,这样同二进制字X的具有二进制值“1”的位数相比二进制字A和B具有相同的或较少的二进制“1”值的位数,从而使这两个二进制字A和B替代二进制字X以便于流水线计算。
本领域的技术人员可以理解,利用在一数据处理系统中执行软件,利用特定用途的硬件或利用特定用途的硬件和软件的组合就可以实现本发明的一个或多个(包括全部)的单元/步骤。图1是根据本发明的方法、系统和计算机程序产品的流程图。应理解,流程图中的每一块和流程图中这些块的组合都可以通过计算机程序指令加以执行。这些计算机程序指令可以装载到计算机或其它可编程数据处理装置中以形成一处理机,这样,在计算机或其它可编程数据处理装置上执行的指令就形成了用于执行在流程块或多个块中指定功能的装置。这些计算机程序指令也可以存贮在计算机可读存贮器中来指示计算机或其它可编程数据处理装置执行特定的功能,这样,存贮在计算机可读存贮器中的指令就形成了包括能执行流程块或多个块中规定的功能的指示装置的产品。该计算机程序指令也可以装载到计算机或其它可编程数据处理装置中,以使得在计算机或其它可编程装置中执行一系列操作步骤来产生计算机执行的处理过程,这样,在计算机或其它可编程装置上执行的指令就提供了用于实现在流程图中的一块或多个块中规定功能的步骤。
相应地,这些流程图中的块支持用于完成特定功能的装置的组合、用于完成特定功能的步骤的组合和用于完成该特定功能的程序指令装置。还应理解,在流程图中每块和流程图中多个块的组合,可通过能完成特定功能或步骤基于特定用途硬件的计算机系统或特定用途的硬件与计算机指令的组合来加以实现。
图1示出用于确定表示一第3M个位二进制字的第1和第2M个位二进制字的操作,该操作使得与第3二进制字比较,第1和第2二进制字中具有二进制“1”值的位数被降低了。首先,与第3二进制字X相同的一二进制字被存贮作为第1二进制字A(块S1),并且全部位是零的一二进制字被存为第2二进制字B(块S2)。从最低有效位开始,在第3二进制字X中检索具有二进制“1”值的连续幂次位对(块S3)。如果存在二进制“1”值的连续幂次位对,则将第1和第2二进制字的每一个增加2连续幂次位对的最低幂次的乘方值(块S4,S5)。
然后,继续对第3二进制字X进行检索以找到具有二进制“1”值的另一连续幂次位对(块S6)。本领域的技术人员可以理解,这可以由多种方法完成,例如,通过直接检验二进制字X,通过检验第1二进制字A一即它具有更多的没有被先前增值操作改变的与二进制字X中的相一致的有效位,等等。如果发现了另一对连续幂次位,那么就增加该第1二进制字A和第2二进制字B(块S4,S5)。当不存在更多的二进制“1”值的连续位时,操作就完成了,留下第1二进制字A和第2二进制字B,这样,第1二进制字A和第2二进制字B的差就表示第3二进制字X(块S7)。
例如,对于具有二进制值“00110011”的第3二进制字X来说,第1二进制字A初始化为“00110011”,和第2二进制字B初始化为“00000000”。在第3二进制字X中的相应于20和21的位上存在二进制值“1”的第一连续幂次位对,这样第1二进制字A和第2二进制字B被增加20,这样第1二进制字A是“00110100”和第2二进制字B是“00000001”。在第3二进制字X中相应于24和25处的位存在二进制“1”的第二连续幂次位对,这样,第1二进制字A和第2二进制字B增加24,如此,第1二进制字A更新为“01000100”和第2二进制字B更新为“00010001”。
如果第3二进制字X表示一负数,通过取2的补码,X可被转换为正数,然后以如上方法可确定第1二进制字A和第2二进制字B。该负数然后可由如下关系式确定:
-(-X)=-(A-B) (A>0,B>0)表1示出本发明的表示第3二进制字X的第1二进制字A和第2二进制字B,本发明的二进制字X对应的十进制数从0到31:
表1十进制数 X = A - B 0: 00000000 = 00000000 - 00000000 1: 00000001 = 00000001 - 00000000 2: 00000010 = 00000010 - 00000000 3: 00000011 = 00000100 - 00000001 4: 00000100 = 00000100 - 00000000 5: 00000101 = 00000101 - 00000000 6: 00000110 = 00001000 - 00000010 7: 00000111 = 00001000 - 00000001 8: 00001000 = 00001000 - 00000000 9: 00001001 = 00001001 - 0000000010: 00001010 = 00001010 - 0000000011: 00001011 = 00010000 - 0000010112: 00001100 = 00010000 - 0000010013: 00001101 = 00010001 - 0000010014: 00001110 = 00010000 - 0000001015: 00001111 = 00010000 - 0000000116: 00010000 = 00010000 - 0000000017: 00010001 = 00010001 - 0000000018: 00010010 = 00010010 - 0000000019: 00010011 = 00010100 - 0000000120: 00010100 = 00010100 - 0000000021: 00010101 = 00010101 - 0000000022: 00010110 = 00100000 - 0000101023: 00010111 = 00100000 - 0000100124: 00011000 = 00100000 - 0000100025: 00011001 = 00100001 - 00001000
26: 00011010 = 00100010 - 00001000
27: 00011011 = 00100000 - 00000101
28: 00011100 = 00100000 - 00000100
29: 00011101 = 00100001 - 00000100
30: 00011110 = 00100000 - 00000010
31: 00011111 = 00100000 - 00000001
如表1所示,本发明能够减少用于表示二进制字X的所需二进制“1”值的位数。这样,在计算操作中,表示第3二进制字X的第1和第2二进制字A和B可以代替第3二进制字,从而简化了操作过程。
在附图和说明书中,虽然是利用特定术语披露了本发明的典型实施例,但它们仅用于一般发明思想的描述并非用于限制本发明,本发明的范围由所附权利要求确定。