Recommended Posts

把高位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處理進位的部份

鏈接文章
分享到其他網站
  • 4 weeks later...

大數模擬相加?


#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;
}

此內容已被編輯, ,由 j100002ben
加上PHP標籤
鏈接文章
分享到其他網站

請登入後來留意見

在登入之後,您才能留意見



立即登入