CN100454234C - 一种处理数据宽度的方法及其应用 - Google Patents
一种处理数据宽度的方法及其应用 Download PDFInfo
- Publication number
- CN100454234C CN100454234C CNB2005100828022A CN200510082802A CN100454234C CN 100454234 C CN100454234 C CN 100454234C CN B2005100828022 A CNB2005100828022 A CN B2005100828022A CN 200510082802 A CN200510082802 A CN 200510082802A CN 100454234 C CN100454234 C CN 100454234C
- Authority
- CN
- China
- Prior art keywords
- data
- bit
- width
- word64
- unit data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明提出一种计算机中处理应用数据宽度的方法,该方法为:获得待处理的应用数据,所述应用数据的宽度为M*N比特,其中M为单位数据比特宽度,N为不小于1的正整数;将所述待处理的应用数据分解为N段M比特的单位数据,其中,分解后的各字段中,最高位的单位数据为负的或非负的整数,非最高位的单位数据均为非负的整数;利用分解后的所述最高位的单位数据和非最高位的单位数据对所述应用数据进行求负运算、加法运算、右移运算或异或运算。采用本发明可以提高了代码的运算速度,减少了运算量,当对软件的实时性要求较高时或运算量较大时,用这种数据处理方法,无疑是很有效的。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及计算机数据处理技术。
背景技术
在软件中或DSP中进行数据处理时,会遇到所用的数据宽度超过了它们实际所能表达的范围,比如:软件或DSP只能支持最宽32比特的数据,但所处理的数据宽度为64比特甚至更宽,在用软件或DSP来验证IC设计时就可能遇到这种情况。
在软件中或DSP中进行数据处理时,需要用一种有效的数据表示方法来处理数据宽度,以解决所遇到的数据宽度超过了它们实际所能表达的范围的问题。
现在以两个32比特的有符号整数处理为一个64比特的有符号整数为例,结合加减移位运算来说明处理数据宽度的方法。
在计算机中有符号的整数是用二进制补码来表示的,最高位为符号位,其余为数据有效位。上述32比特的有符号整数就是这样的,但是64比特的数据是用两个32比特的数据来表示的,如何表示则有多种选择。
定义一个64比特的数据类型如下:
#define word32 int
typedef struct word64{ word32 wh32;word32 wl32;}word64;
word64 w64;
不同的环境或系统中整数(int)的位宽有差异,我们假定它为32比特,并重命名为word32;定义了一个64比特的新数据类型word64,它是由两个word32类型的数据表示的,分为高低两部分,wh32为高字段,wl32为低字段;w64就是一个word64类型的数据;wh32及wl32均为有符号数,w64实际为63比特的数。
现在的处理表示方法是:当w64为非负数时(正数或零),wh32及wl32均为非负数;当w64为负数时,wh32及wl32均为负数;当w64为负数时一种特例是:wh32为零,wl32为负数。
用该表示方法所实现的求负数运算、加法运算、右移运算或异或运算的代码如下:
a)求负运算:
word64 NEG(word64 x){
word64 z;
z.wh32=-x.wh32;
z.wl32=-x.wl32;
if(((z.wh32<0)&&(z.wl32==0))||(z.wl32==(word32)0x80000000))
{ //如果运算结果为负则进行修正以符合数据表示结构
z.wh32=z.wh32+0x1;
z.wl32=z.wl32+(word32)0x80000000;
}else;
return(z);
}
当我们要计算一个64比特的新数据类型word64x的负值时,首先将x转换成由两个word32类型的数据表示的,分为高低两部分,wh32为高字段,wl32为低字段;然后高低两部分分别求负,再合并起来得出x的负值。
b)加法运算:
word64 ADD(word64 x,word64 y){
word64 z;
z.wh32=x.wh32+y.wh32;
z.wl32=x.wl32+y.wl32;
if((x.wl32<0)&&(y.wl32<0)&&(z.wl32>=0))
{
z.wh32=z.wh32-0x1;
z.wl32=z.wl32+(word32)0x80000000;
}
else if((x.wl32>0)&&(y.wi32>0)&&(z.wl32<0))
{
z.wh32=z.wh32+0x1;
z.wl32=z.wl32+(word32)0x80000000;
}
if((z.wh32>0)&&(z.wl32<0))
{
z.wh32=z.wh32-0x1;
z.wl32=z.wl32+(word32)0x80000000;
}
else if((z.wh32<0)&&(z.wl32>0))
{
z.wh32=z.wh32+0x1;
z.wl32=z.wl32+(word32)0x80000000;
}
else;
return(z);
}
当我们要计算两个64比特的新数据类型word64x与y的和时,首先将x转换成由两个word32类型的数据表示,分为高低两部分,wh32为高字段,wl32为低字段,将y转换成由两个word32类型的数据表示,分为高低两部分,wh32为高字段,wl32为低字段;然后x、y的高低两部分分别求和,再合并起来得出x与y的和。
c)右移运算:
word64 SHR(word64 x,short i){//i<=31
word64z;
if((x.wh32<0)&&(x.wl32<0))
{
z.wh32=x.wh32-(word32)0x1;
z.wl32=x.wl32+(word32)0x80000000;
}
else z=x;
z.wl32=(z.wl32>>i)+((z.wh32<<(31-i))&(word32)0x7fffffff);
z.wh32=(z.wh32>>i);
if((z.wh32<0)&&(z.wl32>=0))
{
z.wh32=z.wh32+(word32)0x1;
z.wl32=z.wl32+(word32)0x80000000;
}
else;
return(z);
}
当对64比特的新数据类型word64x进行右移时,首先将x转换成由两个word32类型的数据表示,分为高低两部分,wh32为高字段,wl32为低字段;然后对x进行右移,其中还需对中间结果进行修正。
d)异或运算:
word64 XOR(word64 x,word64 y){
word64 z;
if((x.wl32<0)&&(x.wh32==0))x.wh32=-1;
if((y.wl32<0)&&(y.wh32==0))y.wh32=-1;
z.wh32=x.wh32^y.wh32;
z.wl32=x.wl32^y.wl32;
return z;
}
当我们要对两个64比特的新数据类型word64 x与y求异和时,首先将x转换成由两个word32类型的数据表示,分为高低两部分,wh32为高字段,wl32为低字段,将y转换成由两个word32类型的数据表示,分为高低两部分,wh32为高字段,wl32为低字段;然后对x、y的高低两部分分别求异和,再合并起来得出x与y的异和。
从上述代码可看出,为符合数据表示结构作了很多的数据修正,代码较复杂,这种数据处理方法无疑增加了代码数量及运算时间,降低了运算速度。
发明内容
本发明的目的是提出一种计算机中处理应用数据宽度的方法,能够减少了各种运算的软件代码数量,大大提高软件运算速度。
为此,本发明采用如下方案:
一种计算机中处理应用数据宽度的方法,所述方法包括:
获得待处理的应用数据,所述应用数据的宽度为M*N比特,其中M为单位数据比特宽度,N为不小于1的正整数;
将所述待处理的应用数据分解为N段M比特的单位数据,其中,分解后的各字段中,最高位的单位数据为负的或非负的整数,非最高位的单位数据均为非负的整数;
利用分解后的所述最高位的单位数据和非最高位的单位数据对所述应用数据进行求负运算、加法运算、右移运算或异或运算。
采用了本发明,数据结构易于理解;减少了各种运算的软件代码数量;大大提高软件运算速度,提高了运算效率。
附图说明
图1是本发明的处理数据宽度的结构示意图。
具体实施方式
下面结合说明书附图来说明本发明的具体实施方式。
以64比特的整数作为应用数据,可以用32比特单位数据来处理。如图1所示,从二进制补码的数据来看就可直观地发现:对于64比特的整数,不论它是负数或非负数(整数或零),均可从中间分开成两部分,分开后,高字段部分为一个可负可非负的整数,而低字段则为一个非负数。
用该表示方法所实现的求负数运算、加法运算、右移运算或异或运算的代码如下:
a)求负运算:
word64 NEG(word64 x){
x.wh32=-x.wh32;
x.wl32=(-x.wl32)&(word32)0x7fffffff;
if(x.wl32!=0)
{ //如果运算结果为负则进行修正以符合数据表示结构
x.wh32--;
}else;
return x;
}
同原算法相比,需修正的只有数据的低字段wl32,且修正条件大为简化。
b)加法运算:
word64 ADD(word64 x,word64 y){
x.wh32+=y.wh32;
x.wl32+=y.wl32;
if(x.wl32<0)
{
x.wl32&=(word32)0x7fffffff;
x.wh32++;
}else;
return x;
}
同原算法相比,修正条件大为简化,代码运算小了很多。
c)右移运算:
word64 SHR(word64 x,short i){//i<=31
x.wl32=((x.wl32>>i)+(x.wh32<<(31-i))&(word32)0x7fffffff);
x.wh32=(x.wh32>>i);
return x;
}
同原算法相比,省去了修正条件,少了许多繁杂的加减运算。
d)异或运算:
word64 XOR(word64 x,word64 y){
word64 z;
z.wh32=x.wh32^y.wh32;
z.wl32=x.wl32^y.wl32;
return z;
}
同原算法相比,省去了修正条件,只需对x、y的高低两部分分别求异和,再合并起来得出x与y的异和。
与现有技术的运算代码相比较,很明显本发明的代码简单了很多,少了许多为符合数据结构而进行的修正,从而提高了代码的运算速度,减少了运算量。当对软件的实时性要求较高时或运算量较大时,用这种数据表示方法,无疑是很有效的。
该方法可适用于更宽的数据表示,比如用32比特数表示128比特的数据,最高字段为可负可非负的整数,其它字段均为非负的整数,各种运算代码的实现与上述相似,128比特数据的实际宽度为125比特。
因此用M比特数表示N*M比特数据可采用该方法,数据的实际宽度为N*(M-1)+1,其中M为单位数据比特宽度,N为不小于1的正整数。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉该技术的人在本发明所揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (3)
1、一种计算机中处理应用数据宽度的方法,其特征在于,所述方法包括:
获得待处理的应用数据,所述应用数据的宽度为M*N比特,其中M为单位数据比特宽度,N为不小于1的正整数;
将所述待处理的应用数据分解为N段M比特的单位数据,其中,分解后的各字段中,最高位的单位数据为负的或非负的整数,非最高位的单位数据均为非负的整数;
利用分解后的所述最高位的单位数据和非最高位的单位数据对所述应用数据进行求负运算、加法运算、右移运算或异或运算。
2、如权利要求1所述的方法,其特征在于:所述最高位的单位数据根据应用数据判断应为负的整数,还是非负的整数。
3、如权利要求1或2所述的方法,其特征在于:M为32比特。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100828022A CN100454234C (zh) | 2005-07-08 | 2005-07-08 | 一种处理数据宽度的方法及其应用 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005100828022A CN100454234C (zh) | 2005-07-08 | 2005-07-08 | 一种处理数据宽度的方法及其应用 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1845065A CN1845065A (zh) | 2006-10-11 |
CN100454234C true CN100454234C (zh) | 2009-01-21 |
Family
ID=37063993
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005100828022A Expired - Fee Related CN100454234C (zh) | 2005-07-08 | 2005-07-08 | 一种处理数据宽度的方法及其应用 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100454234C (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018020299A1 (en) | 2016-07-29 | 2018-02-01 | Chan Kam Fu | Lossless compression and decompression methods |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05257882A (ja) * | 1992-03-11 | 1993-10-08 | Nec Corp | データ処理装置 |
JPH09237247A (ja) * | 1996-03-01 | 1997-09-09 | Matsushita Electric Ind Co Ltd | バス幅変換装置およびバス幅変換システム装置 |
-
2005
- 2005-07-08 CN CNB2005100828022A patent/CN100454234C/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05257882A (ja) * | 1992-03-11 | 1993-10-08 | Nec Corp | データ処理装置 |
JPH09237247A (ja) * | 1996-03-01 | 1997-09-09 | Matsushita Electric Ind Co Ltd | バス幅変換装置およびバス幅変換システム装置 |
Also Published As
Publication number | Publication date |
---|---|
CN1845065A (zh) | 2006-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1106621C (zh) | 绘制三次曲线的方法和设备 | |
RU2006143196A (ru) | Способ и устройство для реализации целочисленного деления на инвариантный делитель с использованием n-битовой операции умножения и суммирования | |
CN106951211B (zh) | 一种可重构定浮点通用乘法器 | |
Verschelde | Polynomial homotopy continuation with PHCpack | |
CN1928809A (zh) | 用于执行浮点运算的系统、设备和方法 | |
Emiris et al. | Towards and open curved kernel | |
CN102339217B (zh) | 一种浮点数乘加器融合处理装置及方法 | |
CN111290732B (zh) | 基于posit数据格式的浮点数乘法运算电路 | |
CN107423023B (zh) | 一种16×16-digit冗余十进制乘法器 | |
CN100454234C (zh) | 一种处理数据宽度的方法及其应用 | |
CN103597829B (zh) | 对视频量化参数编码的方法和对视频量化参数解码的方法 | |
Jamil | The complex binary number system | |
CN102073473A (zh) | 基于fpga的十进制浮点乘法器设计 | |
Pratas et al. | Exploring deep Markov models in genomic data compression using sequence pre-analysis | |
US20040117423A1 (en) | Signed integer long division apparatus and methods for use with processors | |
Pai et al. | Low-power constant-coefficient multiplier generator | |
US7739323B2 (en) | Systems, methods and computer program products for providing a combined moduli-9 and 3 residue generator | |
CN104202053B (zh) | 一种快速n位原码到补码的转换装置和转换方法 | |
KR20080083321A (ko) | 패리티 생성 회로, 계수 회로 및 계수 방법 | |
CN104572018A (zh) | 一种用于浮点常数生成的装置及方法 | |
CN107491288B (zh) | 一种基于单指令多数据流结构的数据处理方法及装置 | |
Norouzi et al. | Evolutionary design for energy-efficient approximate digital circuits | |
CN205540690U (zh) | 一种高速多模式模加运算的电路 | |
CN113778377B (zh) | 一种基于基8布斯折叠编码的平方器结构 | |
CN113778523B (zh) | 一种数据处理方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090121 |
|
CF01 | Termination of patent right due to non-payment of annual fee |