2016-10-30 5 views

答えて

1

マイナスシフトを避ける方が良いです。 <<の場合は未定義の動作です。 E1 >> E2の結果はE1右シフトE2ビット位置である

>>ためには、実装定義でありますE1はunsigned型 を有するか、またはE1署名タイプと非負の値を有する場合、結果の値はE1/2E2の商の整数 一部である場合。 E1に符号付きの型と負の値がある場合、結果の値 は実装定義です。

+0

私はもう少し精巧な説明をすることができますか? –

+0

右シフトで負の数がわからない場合は、16で除算するか、先頭の「0」ビットを転記するかを指定します。 –

+0

@AsifAhmed定義されていない動作と実装定義の動作について説明します。 [ここ](http://stackoverflow.com/q/2397984)。おおまかに言えば、コンパイラのドキュメントをチェックするはずです。しかし、とにかく、ネガティブサインをシフトさせないようにしてください。 – AlexD

0

右シフトでは、空ビットが符号ビットで埋められます。これは、数値が正の場合は0、負の場合は1でそれらを埋めます。

-1 = FFFF = 11111111

あなたが右にシフトした場合は、結果の数が同じになります。

なぜ-1 = ffffであるのか理解できない場合は、2の補数を読みます。ほとんどの言語で使用される符号付き整数の表現です。

+0

"_右シフトは空ビットに符号ビットを埋めます._"これは実際の典型的なケースですが、保証されていません。 – AlexD

+0

私はそれを今得ました。私はシフト中にビットが0だけに置き換えられることを知っていました。 didntは、右シフト中に符号ビット値に置き換えられることを知っていませんでした。ありがとうございました 。 。 @AlexD –