2012-05-09 42 views
0

爲什麼我得到這個輸出?這是如何工作的? x << = 3 = -8其中(字節)x = 127?

Byte x; x = 127; X < < = 3; //相同X = X < 的println(X)

輸出:-8

當我記下它在紙張和重組後我得到的位 - 11111000那就是= 248

我想字節佔用1個字節(8位)。不知道它是有符號還是無符號?我認爲它是有符號的嗎?

,因爲在下面C代碼給了我-8還有:

符號字符X = 127; x < < = 3; printf(「x的值=%d \ n」,x);

爲什麼-8? rgd softy

+0

C代碼是不明確 - 移位產生值1016,並且如果該簽名是的char''的範圍之外,那麼結果是實現定義的。 – caf

回答

10

這是因爲byte是使用two's complement簽名的數據類型。而248-256等於-8

+0

+1我會寫'byte'而不是'Byte'和'(byte)248' =='-8' –

0

由於您使用符號的字符,該範圍爲-128至127 .. 的符號字符最高有效位(MSB)被限制在各自的負簽署.. 0 positve ,, 1。

如果爲正數.. 數值正常計算。

但是,如果負.. 值是計數[normal_value] - [MAX_VALUE] 例如:

129 = 1000 0001 [位]

所以vallue簽收= 129 - 256 = - 127

CMIIW

相關問題