专利名称:基于处理器字长的数的二进制表示的制作方法
技术领域:
本发明涉及基于处理器字长以二进制形式表示数。
背景技术:
处理器、例如微处理器、中央处理单元(CPU)等控制许多设备、例如计算器、计算机系统、蜂窝电话等的运行。处理器在许多方面是不同的,例如指令集、字长和时钟速度等。处理器字长规定了在处理器存储单元、即数据寄存器中处理器能同时存储的数据的位数。例如,用于个人计算机的早期处理器具有8位字长,即,处理器每次能存储8位数据。同样地,近来的16、32和64位处理器每次能分别存储16、32和64位数据。
处理器以二进制形式对数据进行操作,即,根据2的幂排列0和1来确定数。为了处理器对数进行操作,处理器将数转换成二进制表示。将十进制数编码成二进制表示是本领域公知的。例如,可以分别用二进制值0101和11101011来表示十进制数5和235。然而,根据处理器将数从一种形式转换到另一种形式所需的操作,将十进制数编码成二进制表示需要一定的处理时间。因此,应用替换编码技术使十进制到二进制编码和解码所需的处理量最小。
此外,数值可能增大到超过单个处理器字的存储能力,例如数256需要9个二进制位来表示,并使用8位处理器的两个字来存储并在其上进行操作。
这种编码的一种基本替换是二进制编码的十进制(BCD),其中使用4个二进制位编码十进制数的每一位。关于前面的例子,十进制数5和235被分别表示成二进制值0101和0010 0011 0101。这样,不是如上所述需要3个和8个二进制位,BCD方法需要3个和10个二进制位来表示同样的两个数。使用BCD方法,如表1所描述的,每一位由相应的4个二进制位来表示
表1设法用给定的二进制位数编码更多的十进制位以提高存储效率的其他编码方法,例如将3个十进制位编码成相应的10个二进制位的Chen-Ho算法达到了99.66%的存储效率。通过使用复杂的编码算法来提高存储效率是以额外复杂性为代价的,例如在处理成本方面,即额外的处理时间和/或专用硬件。
发明内容
本发明提供一种基于处理器字长以二进制形式表示数的方法。
描述包括将数转换成二进制表示的方法方面。按照本方法,数的预定大小的段被转换成二进制表示,其中预定大小的段是基于处理器字长。
另外的方法方面包括将二进制形式表示的并且由不止一个段组成的数转换成十进制表示,其中段大小根据处理器字长来确定。将不止一个二进制段中的一个段转换成十进制形式所产生的第一个十进制段与将不止一个二进制段中的另一个段转换成十进制形式所产生的第二个十进制段组合。
另外的方法方面包括用具有预定位数的预定字长的处理器将具有若干位的数转换成二进制表示。确定预定字长的一个字中能存储的最大位数。将确定的最大可存储位数的数转换成第一个字中的二进制表示。
用于根据处理器字长以二进制形式表示数的计算机可读介质包括以二进制形式表示数的不止一位的不止一个段,其中段大小根据处理器字长来确定。
通过下面的详细描述,对本领域的技术人员来说,本发明的其他优点将变得显而易见,其中只是通过举例说明实现本发明所设想的最佳方式给出和描述了本发明的优选实施例。正如所认识到的,本发明能够采用其他和不同的实施例,在各种显而易见的方面可以修改其若干细节,所有这些都不脱离本发明。
本发明通过举例而不是通过限定来说明,在附图的各图中,其中具有相同参考标号的元件表示相同的元件,其中图1是按照本发明的实施例的高级控制流。
具体实施例方式
与上述的方法相比较,本发明的机制根据处理器字长以二进制形式表示数。
类似于字母表,其中用设定范围的可能的符号来区分数和组合以表示许多不同的字,不同的记数制包括用于表示不同值的一定范围的可能的各个数字。例如,在十进制记数制中,数字范围是0-9。任何十进制数用数字0-9中1个单独数字或一个或多个单独数字的组合根据数字的位置结合10的单位来表示。即,数字256表示2*102+5*101+6*100。类似地,在十六进制记数制中数字的范围是0-F,对应于值0-15,在八进制记数制中数字的范围是0-7等等。在备选实施例中,可以使用不同的记数制;然而,为简明起见,下面只描述十进制记数制。
按照本发明的一个实施例通过确定给定的处理器字长所能存储的最大位数,其中每位必须能取数字范围中的任一数字,并将数分段成大小等于最大位数的几部分,将数转换成二进制表示。在一个实施例中,被转换的数是十进制数,然而,备选实施例可以使用下面描述的类似方法转换不同的记数制的数。为了简明起见,这里使用十进制数。
最大十进制数的每个数字位置必须能取记数制中数的范围的最大值。即,对于8位字长,能存储的最大十进制数是255,这样字长中可存储的可能位数是3,然而,第一位(首位)值被限制在0-2的范围内,以便保持在该字长内。第二位和第三位的值没有这样限制,可以取十进制数字范围内的任意值,即值0-9中的任何值可以放置在第二位和第三位(第一位的右边)而不会超出二进制表示的字长。
按照一个实施例,为了根据字长将十进制数转换成二进制数,根据处理器字长确定段大小。图1描述了按照本发明的一个实施例的处理器执行进程的控制流。已知特定的处理器字长,按照图1的控制流执行指令的处理器在步骤100确定用给定字长以二进制表示所能存储的最大十进制数,例如对于8位处理器,能存储的最大数是255。控制流继续进行到步骤102,其中确定位长等于能存储的最大十进制数的位数的最大十进制数,即最大的n位十进制数。例如,999是最大的三位十进制数。
控制流继续进行到步骤104,处理器将最大n位十进制数和能存储的最大数相比较。在步骤106,如果最大n位十进制数大于能存储的最大数,那么控制流进行到步骤108,用来划分十进制数的段大小被设置成比能存储的最大十进制数的位数少1,即n-1。如果最大n位十进制数小于或等于能存储的最大数,那么控制流进行到步骤110,用来划分十进制数的段大小被设置成能存储的最大十进制数的位数,即n。对于上面的例子,数999比数255大,段大小被设置成2,即n-1,3-1=2。也就是说,每个十进制数被划分为每段不超过两位的一个或多个段。
在步骤108或110中确定段大小后,控制流进行到步骤112,处理器根据上面确定的段大小、即以给定处理器字长存储的位数,将数、例如要以二进制形式存储的十进制数划分成若干段。
段大小决定了在每个给定的处理器字长中要以二进制形式表示的位数。根据特定的十进制数的位数,可能需要多个段来表示整个十进制数。要存储的数的位数决定了所需的段数,例如,要存储的数的位数除以段大小的四舍五入结果。在前述的例子中,要存储的数的位数是3,段大小是2,所以存储这个数所需的段数目是2,即3/2=1.5,四舍五入为2。
根据前面的例子,8位处理器字长需要将十进制数划分为两位的段。例如,用两段来存储数763第一段以二进制形式存储十进制数7,第二段以二进制形式存储十进制数63。表2描述了数763的十进制和分段二进制表示。
表2在另一个例子中,数635664是6位长,用3段来存储第一段以二进制形式存储十进制数63,第二段以二进制形式存储十进制数56,第三段以二进制形式存储十进制数64。表3描述了数635664的十进制和分段二进制表示。
表3假定已知8位的处理器字长,能存储的最大十进制数是255,即以8位的排列用0和1的组合可存储从0到255的256个值的范围。
现在描述一个简明的例子。假定8位的处理器字长,用8位以二进制形式能存储的最大数是255,即二进制形式的1111 1111。在给定的8位字中可能存储的数的范围是从0到255。然而,当每一位必须能够是可能的数的整个范围中所有的数时,即从0到9,那么8位能存储的最大位数是2,即数的范围是从0到99。
用另外的方式表述,所有两位十进制数,包括一位的十进制数,可以用8位字长来存储;然而,不是所有的三位十进制数都能存储在同样的8位字长中。例如,首位大于二(“2”)的任何三位十进制数不能以二进制形式存储在8位字中。这样,能存储在一个8位字长中的最大位数是2。
假定16位的处理器字长,现在描述第二个简明的例子。16位能以二进制形式存储的最大数是65535,即二进制形式的1111 1111 11111111。用给定的16位字可能存储的数的范围是从0到65535。然而,当每一位必须能够是可能的数的整个范围的所有数时,16位所能存储的最大位数是4,即数的范围是从0到9999。因为99999大于65535,所以可用的最大位数是n-1,4。
用另一种方式表述,所有的4位十进制数,包括少于4位的十进制数,可以存储在16位字长中;然而,不是所有大于4位的十进制数都能存储在同样的16位字长中。这样,16位字长能存储的最大位数是4。
假定32位的处理器字长,现来描述第三个简明的例子。32位能以二进制形式存储的最大数是4294967295,即二进制形式的11111111 1111 1111 1111 1111 1111 1111。用给定的32位字可能存储的数的范围是从0到4294967295。然而,当每一位都必须能够是可能的数的整个范围的所有数时,32位所能存储的最大位数是9,即数的范围是从0到999999999。
用另一种方式表述,所有的9位十进制数,包括少于9位的十进制数,可以存储在32位字长中;然而,不是所有大于9位的十进制数都能存储在同样的32位字长中。这样,32位字长能存储的最大位数是9。
按照上述方法存储的数能够用同样的数学运算来进行运算,即加、减、乘、除等,就像用直接的二进制变换所存储的数一样。如果用不止一个段来存储一个数,那么可能要记住额外进位并将其应用到另一个基于段的运算。由于不需要额外的变换操作,例如逐位的值移位等,因此数学运算能够比二进制编码的十进制方法执行得更快。
对于较大处理器字长,上述方法的存储效率比使用二进制编码的十进制(BCD)方法高。即,通过比较给定存储方法所使用的最大位数和用于二进制表示的最大位数来确定存储效率。例如,使用16位字长,可存储数的最大数量是10000,即范围从0到9999。存储效率是log210000/16位=83.05%。对于较大的处理器字长,存储效率与BCD方法比较有所改进。例如,使用32位字长,能存储的数的最大数量是1000000000,即范围从0到999999999。存储效率是log21000000000/32位=93.43%。然而,BCD方法相应的存储效率是log2100000000/32位=83.05%。类似地,对于64位字长,能存储的数的最大数量是10000000000000000000,即范围从0到9999999999999999999。存储效率是log210000000000000000000/64位=98.62%。然而,BCD方法的相应的存储效率是log210000000000000000/64位=83.05%。
对于大的数,用上述方法将十进制数转换成二进制数所需的时间小于将单个大数从十进制表示转换成二进制表示所需的时间。因为这个数是分段转换的,单个大数不需要使用多步全部在一次被转换。此外,因为由一段所表示的最大数始终在处理器字长的范围内,所以处理器一步就能将段数转换成二进制表示。另外,对于比处理器字长大的数,需要包括将中间结果存储到寄存器的多步处理。
类似的原因适用于从二进制到十进制的转换。与存储成单个多字二进制值的十进制数的解码相比,将分段的二进制数解码为十进制数要快一些。关于解码多字二进制值,或者必须构建整个二进制数,然后将其转换成十进制数,需要多次加和乘运算;或者二进制数的每个字长段必须被解码,乘以2n,其中n基于字长中二进制位数,并加到任何先前解码的段上。相反,按照一个实施例,由于段只是与处理器字长一样大,通常在单操作中解码各个二进制段,并连接起来而构成十进制数。
此外,给定数的特定部分可能容易解码,例如,存储在32位处理器字长系统中的45位十进制数的最右边15位容易通过获得和解码2个段、即2个字的二进制数据值来恢复。这是因为采用32位字长,能存储的最大位数是9,即如上所述,每段能表示多达9位值的十进制数。
本领域的普通技术人员容易看出,按照本发明的实施例实现了上述许多优点。在阅读上述说明书后,普通技术人员将能够进行这里广泛公开的本发明的各种变化、等效物替代和各种其他方面。因此,这里所承认的保护要仅由所附权利要求及其等效物中包含的定义来限定。
权利要求
1.一种将数转换成二进制表示的方法,所述方法包括以下步骤将数的预定大小的段转换成二进制表示,所述预定大小的段基于处理器字长。
2.如权利要求1所述的方法,其特征在于,所述预定大小的段是一位或多位,并且位数等于所述处理器字长的一个字中能存储的最大位数,其中每位能够是记数制数范围中的所有数。
3.如权利要求1所述的方法,其特征在于,还包括以下步骤如果具有给定位数的最大数大于所述处理器字长中能存储的最大数,则将段大小设置成具有给定位数的最大数的位数。
4.如权利要求1所述的方法,其特征在于,还包括以下步骤如果具有给定位数的最大数小于或等于所述处理器字长中能存储的最大数,则将段大小设置成比具有给定位数的最大数的位数少1。
5.如权利要求1所述的方法,其特征在于,所述二进制形式的数大于单个处理器字。
6.一种将二进制形式表示的并且包括不止一个段的数转换成十进制表示的方法,所述方法包括以下步骤将不止一个二进制段中的一个段转换成十进制形式所产生的第一个十进制段和将不止一个二进制段中的另一个段转换成十进制形式所产生的第二个十进制段组合,其中段大小根据处理器字长来确定。
7.一种将具有一位或多位的数转换成二进制表示的方法,包括以下步骤确定具有预定字长的处理器的一个字中能存储的最大位数;以及将所确定的能存储的最大位数的数转换成第一个字中的二进制表示。
8.如权利要求7所述的方法,其特征在于,还包括以下步骤对于减去所有先前转换的位的数的所确定的能存储的最大位数重复所述转换步骤,得到附加字中的二进制表示。
9.一种用于根据处理器字长用二进制形式表示数的计算机可读介质,包括不止一个段,其中段大小根据处理器字长来确定,以二进制形式表示不止一位的数。
10.如权利要求9所述的计算机可读介质,其特征在于,所述段大小是等于所述处理器字长的一个字中能存储的最大位数的位数,其中每位能够是记数制数范围中的所有数。
全文摘要
描述一种根据处理器字长将数转换成二进制表示的方法。按照本方法,将数的预定大小的段转换成二进制表示,其中预定大小的段基于处理器字长。还描述一种将二进制形式表示的并且包括不止一个段的数转换成十进制表示的方法,其中段大小根据处理器字长来确定。将不止一个二进制段中的一个段转换成十进制形式所产生的第一个十进制段与将不止一个二进制段中的另一个段转换成十进制形式所产生的第二个十进制段组合。
文档编号G06F7/38GK1766830SQ200510118859
公开日2006年5月3日 申请日期2005年10月27日 优先权日2004年10月28日
发明者C·德布雷比斯森 申请人:惠普开发有限公司