2012-05-09 7 views
0

なぜこの出力が得られますか?これはどのように機能しますか? x << = 3 = -8ここで、(バイト)x = 127?

バイトx; x = 127; X < < = 3; //同じとしてX = X < のprintln(X)

出力:-8私は紙でそれを書き留め、私はなっていたビットをtwiddled

- 11111000、それは= 248ですか?

バイトが1バイト(8ビット)を占めているとします。署名されているかどうかは分かりませんが、署名することを保証しますか? Cのコード下記ため

私-8同様に得た:

signed char型X = 127。 x< < = 3; printf( "x =%d \ n"、xの値);

なぜ-8 ?? rgd softy

+0

Cコードは、明確ではない - シフト値1016を生成し、その署名char' 'の範囲外である場合、結果は実装定義です。 – caf

答えて

10

bytetwo's complementを使用する署名付きデータ型です。 248-256-8に等しい。

+0

+1 'Byte'ではなく' byte'と '(byte)248' ==' -8'と書くでしょう –

0

あなたは-128〜127 .. signed char型のため 最上位ビット(MSB)はそれらの負のために... positve 0 ,, 1署名に制限されている範囲signed char型を、使用しているため。

正の値の場合... 値は通常通りカウントされます。

しかし負場合.. 値[normal_value]カウントは - [MAX_VALUE] 例:= 1000 0001

129 [ビット]

署名さ= 129のためのようvallue - 256 = - 127

CMIIW

関連する問題