我的代碼在下面,它適用於大多數輸入,但我注意到,對於非常大的數字(2147483647除以2作爲特定示例),我得到分段錯誤並且程序停止工作。請注意,badd()和bsub()函數分別僅添加或減去整數。爲什麼我的按位分割函數會產生分段錯誤?
unsigned int bdiv(unsigned int dividend, unsigned int divisor){
int quotient = 1;
if (divisor == dividend)
{
return 1;
}
else if (dividend < divisor)
{ return -1; }// this represents dividing by zero
quotient = badd(quotient, bdiv(bsub(dividend, divisor), divisor));
return quotient;
}
我對我的bmult()函數也有點麻煩。它適用於某些值,但程序失敗的值爲-8192倍3.此功能也列出。預先感謝您的幫助。對此,我真的非常感激!
int bmult(int x,int y){
int total=0;
/*for (i = 31; i >= 0; i--)
{
total = total << 1;
if(y&1 ==1)
total = badd(total,x);
}
return total;*/
while (x != 0)
{
if ((x&1) != 0)
{
total = badd(total, y);
}
y <<= 1;
x >>= 1;
}
return total;
}
不是說我不知道猜測它們是什麼,在你的代碼中缺少兩個可能很重要的函數。你可能也想把它們帶進去。 – WhozCraig
告訴我們你在哪裏得到segfault可能也很有用。 –
就像我說過的那樣,bsub()和badd()函數只是簡單地加上或減去兩個整數,當輸入我在描述中列出的值時發生故障。前兩個函數起作用,所以我不想通過爲他們顯示代碼來更長時間地提出問題。 – LulzCow