V <0

2016-03-29 7 views
0

このロジックが与える: - VがV <0

if v < 0 then -1, 
else +1 

sign = +1 | (v >> (sizeof(int) * CHAR_BIT - 1)) 

>場合を説明= 0、それは、かなり明確だ が、負の整数の場合には、私は修正しています。

のは-1たとえば(1111 1111)にみましょう: -

仮定: - intをとる2バイト

CHAR_BIT(各バイトで表されるビットのno): - 8

SO後

sign = 0000 0001 | 0000 0001 

だから私はどのようになるのですか?

+0

CまたはC++ですか?言語タグを追加します。 –

+0

違いがありますか? – prvn

+0

異なる言語ではビット操作のルールが異なるため問題になります。一般的に、質問が明示的に言語に依存しない限り、言語タグは必要です。 –

答えて

1

ビットシフトには、logical shiftarithmetic shiftの2種類があります。したがって、intが4バイトであるとすれば、どれが(-1) >> 31ですか?

C/C++では、オペランドが符号付きの型で負の値を持つ場合、結果は実装定義です。

実際にはほとんどのマシンでは算術シフトです。つまり、(-1) >> 31の結果は-1ですが、技術的には結果は実装によって異なります。

関連する問題