不重要 11 發表於 April 3, 2011 檢舉 Share 發表於 April 3, 2011 最近有一個組語的作業裡面有一段要用到多個數字相加(正整數)可是一個register只能存8bitsoverflow的機會非常大這種情況要怎麼處理??? 鏈接文章 分享到其他網站
j100002ben 10 發表於 April 4, 2011 檢舉 Share 發表於 April 4, 2011 把高位bit拉出來處理...換個說法...一個Byte有8個bits..把最高位留下來避免溢位....然後因為是正整數,所以不用儲存正負號...所以接下來你有7個bit可以儲存數字部份...那樣範圍會是0-127(2^0 ~ 2^7-1)然後把下7個bit的值...也就是128-16383(2^7~2^14-1)放到下一個暫存器...反正看你想要作幾位元的運算,就留幾個byte來運算...5個就可以算到35bits等等才5Byte,暫存器很...就盡量用吧...檢查是否有進位(就是有資料放在第8個bit上)就用AND 0x80看看是不是等於0x80如果是的話就是有進位了..對了...記的留一個Byte處理進位的部份 鏈接文章 分享到其他網站
不重要 11 發表於 April 5, 2011 作者 檢舉 Share 發表於 April 5, 2011 謝謝你給的靈感我直接把他們換成4bits來運算反正最多也才8個數字相加也不會超過儲存範圍 鏈接文章 分享到其他網站
j100002ben 10 發表於 April 6, 2011 檢舉 Share 發表於 April 6, 2011 謝謝你給的靈感我直接把他們換成4bits來運算反正最多也才8個數字相加也不會超過儲存範圍不會啦~~~;-) 鏈接文章 分享到其他網站
zhaozeyang 10 發表於 May 5, 2011 檢舉 Share 發表於 May 5, 2011 (已編輯) 大數模擬相加?#include <iostream>#include<string.h>using namespace std;int main(int argc, char *argv[]){ int n,i; cin>>n;//n个測試案例 for(i=1;i<=n;i++) { int l1,l2,l,a[1010]={},b[1010]={},c[1010]={},j,temp; char a1[1011]={},b1[1011]={},*psta,*pstb; cin>>a1>>b1;//兩個數 psta=a1;pstb=b1; while(*psta=='0') psta++; while(*psta=='0') pstb++; l1=strlen(a1);l2=strlen(b1); for(j=1;j<=l1;j++) a[j]=a1[l1-j]-'0'; for(j=1;j<=l2;j++) b[j]=b1[l2-j]-'0'; l1=strlen(psta);l2=strlen(pstb); l=l1>l2?l1:l2; for(temp=0,j=1;j<=l;j++) { c[j]=a[j]+b[j]+temp; if(c[j]>=10) {temp=1;c[j]-=10;} else temp=0; } if(temp==1) {c[l+1]=1;l++;} cout<<"Case "<<i<<":\n"; cout<<a1<<" + "<<b1<<" = "; for(j=l;j>=1;j--) cout<<c[j]; cout<<'\n'; if(i<n) cout<<'\n'; } return 0;} 此內容已被編輯, May 5, 2011 ,由 j100002ben 加上PHP標籤 鏈接文章 分享到其他網站
Recommended Posts
請登入後來留意見
在登入之後,您才能留意見
立即登入