java 移位為何會產生負數

時間 2021-06-06 16:04:55

1樓:張可

所有數字在計算機底層都是以二進位制形式儲存的,計算機以補碼形式儲存所有整數。

正數的補碼和原碼完全相同。

如果這個整數是負數,那計算機首先會把這個數值轉換為二進位制數,這個二進位制數中的最高位為符號位,為 1 表示是負數,為 0 表示是負數,這個二進位制數就叫原碼。

然後對這個原碼除了符號位之外進行按位取反,就叫反碼。

然後再把反碼加一,形成補碼。

計算機就是把這個補碼儲存在記憶體中,所以當你對這個數進行移位操作時,如果本來符號位(最高位)是 0 ,這時移位之後正好把乙個 1 移到了符號位,這不就變成了負數了嗎。

2樓:Intopass

public

class

Main

private

static

void

printBinary

(inti)

}輸出:

1000000000000000000000000000000011073741824

01000000000000000000000000000000-2147483648

100000000000000000000000000000001073741824

01000000000000000000000000000000536870912

00100000000000000000000000000000536870912

00100000000000000000000000000000-2147483648

10000000000000000000000000000000-1073741824

110000000000000000000000000000001073741824

01000000000000000000000000000000你可以研究一下補碼是什麼意思,只要最高位是1,結果必然是負數。

<< 1 最右邊都是用0補位,基本等於乘以 2,乘法會發生上溢的。

>> 1 最左邊會保持原符號位的值,基本等於除以 2>>> 1 最左邊會用0補位。

Java移位運算超過了會怎樣?

深秋的黎明 禁言 因為int是乙個32位的二進位制數,以下 右邊的數值以二進位制顯示,可以看見,超出32位便會重回第乙個數字。1 1 10 1 2 100 1 3 1000 1 4 10000 1 5 100000 1 6 1000000 1 7 10000000 1 8 100000000 1 9...

負氧離子乳膠枕真的會產生負氧離子嗎?原理是什麼?

睡睡睡睡睡 其實市面上的負離子枕頭都只是概念型產品,因為根本無法檢測的負離子,而且也無法產生負離子。首先我們要了解負離子是怎樣產生的,其中自然界產生負離子三大機制為 1 大氣受紫外線,宇宙射線,放射物質,雷雨,風暴,土壤和空氣放射線等因素的影響發生電離而被釋放出的電子很快又和空氣中的中性分子結合,而...

為什麼鋼鐵俠死了會讓我產生強烈的自責和負罪感?

喜歡乙個人獨處 乙個玩世不恭外表自負的富二代在大難時刻搶在所有 超能力者 前面赴死,任誰都不禁懷疑自己平日裡那副道貌岸然的樣子不過是身為Lesser Man的表演。P.S.Tony Stark的死跟指環王裡派Frodo去Mordor是乙個意思,只有這個結局才能體現 真正的偉大來自於身為凡人的勇敢 不...