私は使用することができます! 〜&^| + < < >>2進演算子のみを使用して符号付き整数を分割するにはどうすればよいですか?
私は2^nで数xを分割しようとしていますC.
でこれを書いています。 だから私はx >> nをシフトすると思っていましたが、奇数の負の整数では機能しません。もともとは次のようになりました。
int dl18(int x, int n) {
return (x >> n);
}
x34 = -9かつn = 1の場合、出力は-4になりますが、-5になります。 x = -9かつn = 0の場合、出力は正しい(-9)。
ありがとうございます。
だから私は、これを行うことは、それがない限り、すべてのもののために働く可能n = 0で、xが負の数である考え出し:符号付き整数のtwo's complement表現と>>
オペレータのarithmetic shift行動を想定し
return (~(x >> 31) & (x >> n)) | ((x >> 31) & ((x >> n) + 1));
FYI、除算演算子 '/'もバイナリです。 「バイナリ」は、「単項」および「三項」とは対照的に、2つのオペランドを有することを意味する。 –
'>'にある丸めを補うだけです – harold
私はどのバイナリ演算子を使用することができるかを指定しましたが、その1つではありません。また、私はそのようにまっすぐ前方に考えるので、n = 0の場合は、出力が間違っているので、いけない。 – pootyy