專利名稱:一種處理數據寬度的方法及其應用的制作方法
技術領域:
本發明涉及計算機技術領域,尤其涉及計算機數據處理技術。
背景技術:
在軟件中或DSP中進行數據處理時,會遇到所用的數據寬度超過了它們實際所能表達的范圍,比如軟件或DSP只能支持最寬32比特的數據,但所處理的數據寬度為64比特甚至更寬,在用軟件或DSP來驗證IC設計時就可能遇到這種情況。
在軟件中或DSP中進行數據處理時,需要用一種有效的數據表示方法來處理數據寬度,以解決所遇到的數據寬度超過了它們實際所能表達的范圍的問題。
現在以兩個32比特的有符號整數處理為一個64比特的有符號整數為例,結合加減移位運算來說明處理數據寬度的方法。
在計算機中有符號的整數是用二進制補碼來表示的,最高位為符號位,其余為數據有效位。上述32比特的有符號整數就是這樣的,但是64比特的數據是用兩個32比特的數據來表示的,如何表示則有多種選擇。
定義一個64比特的數據類型如下#define word32 inttypedef 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.wl32>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比特的新數據類型word64 x與y的和時,首先將x轉換成由兩個word32類型的數據表示,分為高低兩部分,wh32為高字段,wl32為低字段,將y轉換成由兩個word32類型的數據表示,分為高低兩部分,wh32為高字段,wl32為低字段;然后x、y的高低兩部分分別求和,再合并起來得出x與y的和。
c)右移運算word64 SHR(word64 x,short i){//i<=31word64 z;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<<(3l-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比特的新數據類型word64 x進行右移時,首先將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比特的單位數據,其中最高位的單位數據可以為負的或非負的整數,其他單位數據為非負整數。
所述最高位的單位數據根據應用數據判斷應為負的整數,還是非負的整數。
所述單位數據寬度可以為32比特。
對這種處理數據寬度方法的應用,可以應用來進行的運算包括求負運算、加法運算、右移運算、異或運算。
采用了本發明,數據結構易于理解;減少了各種運算的軟件代碼數量;大大提高軟件運算速度,提高了運算效率。
圖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<=31x.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的正整數。
以上所述,僅為本發明較佳的具體實施方式
,但本發明的保護范圍并不局限于此,任何熟悉該技術的人在本發明所揭露的技術范圍內,可輕易想到的變化或替換,都應涵蓋在本發明的保護范圍之內。因此,本發明的保護范圍應該以權利要求的保護范圍為準。
權利要求
1.一種處理數據寬度的方法,應用數據寬度為M*N比特,其中M為單位數據比特寬度,N為不小于1的正整數,其特征在于將應用數據分解成N段M比特的單位數據,其中最高位的單位數據可以為負的或非負的整數,其他單位數據為非負整數。
2.如權利要求1所述的處理數據寬度的方法,其特征在于所述最高位的單位數據根據應用數據判斷應為負的整數,還是非負的整數。
3.如權利要求1或2所述的處理數據寬度的方法,其特征在于所述單位數據寬度可以為32比特。
4.如權利要求1所述的處理數據寬度方法的應用,其特征在于可以應用所述處理數據寬度的方法來進行的運算包括求負運算、加法運算、右移運算、異或運算。
全文摘要
本發明提出一種處理數據寬度的方法,應用數據寬度為M*N比特,其中M為單位數據比特寬度,N為不小于1的正整數,將應用數據分解成N段M比特的單位數據,其中最高位的單位數據可以為負的或非負的整數,其他單位數據為非負整數,采用本發明可以提高了代碼的運算速度,減少了運算量,當對軟件的實時性要求較高時或運算量較大時,用這種數據處理方法,無疑是很有效的。
文檔編號G06F7/00GK1845065SQ20051008280
公開日2006年10月11日 申請日期2005年7月8日 優先權日2005年7月8日
發明者蔣代林 申請人:華為技術有限公司