割り当て/プロジェクトで、ビットシフトと論理演算子のみを使用して符号なし整数に 1 を加算する質問があります。関数内に「+」、「-」、「*」、または「/」記号を含めないでください。
私は先日から試していますが、まだ成功していません。これまでのところ、次のことを試しました。
int A = (((B&C)<<1)^(B^C))
誰でもこれを解決するのを手伝ってもらえますか?
あなたはどんなプログラミング言語でも私を助けることができます.
割り当て/プロジェクトで、ビットシフトと論理演算子のみを使用して符号なし整数に 1 を加算する質問があります。関数内に「+」、「-」、「*」、または「/」記号を含めないでください。
私は先日から試していますが、まだ成功していません。これまでのところ、次のことを試しました。
int A = (((B&C)<<1)^(B^C))
誰でもこれを解決するのを手伝ってもらえますか?
あなたはどんなプログラミング言語でも私を助けることができます.
unsigned int i = ...;
unsigned int mask = 1;
while (i & mask)
{
i &= ~mask;
mask <<= 1;
}
i |= mask;
ジャワ:
public static int inc(int i){
if ((i & 1) == 0)
return i | 1;
else
return inc(i>>1)<<1;
}
PS while loop バリアント by henrikは明らかに高速です
これを試してください:
int n = 3;
n = abs(~n);
std::cout << n;
~n = -(n+1)
[~
はビット単位の補数です]。(n + 1)
2 の補数変換で 1 を加算したためです。
(x + 1)
もう一度適用否定を取得するには。したがって、最終的な式は になりabs(~x)
ます。
算術演算子を使用せずに数値をインクリメントするロジック( +, -. * and /
)
unsinged int no = 3; //actual number
unsigned int one = 1;
unsigned int ans = 0;
unsigned int carry = 0;
unsigned int prev_ans = 0;
unsigned int prev_carry = 0;
ans = no ^ one;
carry = no & one;
while (carry != 0)
{
carry <<= 1;
prev_ans = ans;
prev_carry = carry;
ans = prev_ans ^ prev_carry;
carry = prev_ans & prev_carry;
}
Google でFull Adderを探し、実装してみてください。
これは簡単すぎます。たとえば、Haskellでは次のようになります。
data Unsigned = Zero | Succ Unsigned
increment :: Unsigned -> Unsigned
increment u = Succ u
ビット演算子や算術演算子はありません。演算子はまったくありません。