**:
加法運算:
[cpp]view plain
copy
intaddwithoutarithmetic(
intnum1,
intnum2)
簡化一下:
[cpp]view plain
copy
intadd(
inta,
intb)
上面的思路就是先不計進製相加,然後再與進製相加,隨著遞迴,進製會變為0,遞迴結束。
非遞迴的版本如下:
[cpp]view plain
copy
intadd(
inta,
intb)
return
a;
}
減法運算:
[cpp]view plain
copy
//這個和加法一樣了,首先取減數的補碼,然後相加。
intnegtive(
inta)
//取補碼
intsub(
inta,
intb)
正數乘法運算:
[cpp]view plain
copy
//正數乘法運算
intpos_multiply(
inta,
intb)
return
ans;
}
整數除法(正整數)
[cpp]view plain
copy
//除法就是由乘法的過程逆推,依次減掉(如果x夠減的)y^(2^31),y^(2^30),...y^8,y^4,y^2,y^1。減掉相應數量的y就在結果加上相應的數量。
intpos_div(
intx,
inty)
} return
ans;
}
完整的實現:
[cpp]view plain
copy
// 加減乘除位運算
// 程式中實現了比較大小、加減乘除運算。所有運算都用位操作實現
// 在實現除法運算時,用了從高位到低位的減法
// 具體如下,演算法也比較簡單,所以沒有作注釋
#include
#include
using
namespace
std;
intadd(
inta,
intb)
return
a;
} //這個和加法一樣了,首先取減數的補碼,然後相加。
intnegtive(
inta)
//取補碼
intsub(
inta,
intb)
// 判斷正負
intispos(
inta )
intisneg(
inta )
intiszero(
inta )
//正數乘法運算
intpos_multiply(
inta,
intb)
return
ans;
} //乘法運算
intmultiply(
inta,
intb)
return
negtive( pos_multiply( negtive(a), b ) );
} return
negtive( pos_multiply(a, negtive(b)) );
} //除法就是由乘法的過程逆推,依次減掉(如果x夠減的)y^(2^31),y^(2^30),...y^8,y^4,y^2,y^1。減掉相應數量的y就在結果加上相應的數量。
intpos_div(
intx,
inty)
} return
ans;
} //除法運算
intmydiv(
inta,
intb )
if( iszero(a) )
return
0;
if( ispos(a) )
if( ispos(b) )
return
negtive( pos_div( negtive(a), b ) );
return
pos_div( negtive(a), negtive(b) );
}
// 比較兩個正數的大小(非負也可)
intisbig_pos(
inta,
intb )
return
(c&a);
}
// 比較兩個數的大小
intisbig(
inta,
intb )
return
0;
} if
( isneg(b) )
return
1;
return
isbig_pos(a, b);
}
用位運算實現四則運算之加減乘除
按位異或 按位與 按位或 計算機系統中,數值一律用補碼來表示 因為補碼可以使符號位和數值位統一處理,同時可以使減法按照加法來處理。對補碼做簡單介紹 數值編碼分為原碼,反碼,補碼,符號位均為0正1負。原碼 補碼 數值位取反加1 補碼 原碼 對該補碼的數值位繼續 取反加1 補碼 的絕對值 稱為真值 正數...
用位運算實現四則運算之加減乘除
原文 用位運算實現四則運算之加減乘除 遞迴版本 int add int num1,int num2 遞迴簡化版本 int add2 int num1,int num2 非遞迴版本 int add3 int num1,int num2 return num1 兩數相加,和的部分可用 異或 完成,進製部...
用位運算實現四則運算之加減乘除
加法運算 int addwithoutarithmetic int num1,int num2 簡化一下 int add int a,int b 上面的思路就是先不計進製相加,然後再與進製相加,隨著遞迴,進製會變為0,遞迴結束。非遞迴的版本如下 int add int a,int b return ...