2012-09-27 51 views
0

我總是困惑於這兩個運營商之間,我不知道是什麼讓 的數字越來越小。總是困惑於<< and >>

有人可以告訴我如何記住每個操作員的操作? (符號,一些示例等)

+0

有人可能會指出,在這種情況下,排序是否重要?我的意思是,「LittleEndian <<等於'BigEndian >>'? MiddleEndian呢? – elmigranto

回答

1

把它們想象成「向上」或「向下」位移動的箭頭。

<<操作者將通過推動比特向上朝着一個字節中的更高的值槽增加的數量的大小,例如:

128 64 32 16 8 4 2 1 
------------------------------- 
0 0 0 0 0 1 0 0 before push (value = 4) 
0 0 0 0 1 0 0 0 after << push (value = 8) 

>>操作者將通過推動比特減少的數量的大小下來,對一個字節中的較低值插槽,例如:

128 64 32 16 8 4 2 1 
------------------------------- 
0 0 0 0 0 1 0 0 before push (value = 4) 
0 0 0 0 0 0 1 0 after >> push (value = 2) 
+0

您也應該包括操作說明。我的意思是,人們很容易在2 << 4 and 4 >> 2之間感到困惑。不是嗎? – Prasanth

0

在二進制中的位移與十進制中的方向相同。左移(1,10,100,...)使數字變大。向右移動使得數字變小。

0

< <是左移運算符。例如0b10 < < 2 = 0b1000(構成0b語法)。 >>是右移操作符,它恰恰相反。 0b10 >> 1 = 0b1。符號不會因簽名數字右移而改變。對於左手簽名,您必須瞭解2's complement以瞭解發生了什麼。

0
<< --- it tells going left direction and this means left side decreasing. 

>> --- it tells going right direction and this means right side decreasing. 
1

你真的不能認爲它們是使數更大或更小。取決於輸入,這兩種移位都可以使數字變大或變小。

  • 左移位(無符號的解釋):0位可以脫落的左側,使得數更大,或1位即可脫落左側,使得數量少。
  • 左移(有符號解釋):0位可以移入先前爲0的符號,使數字變大;一個0位可以移入先前爲1的符號,使得數字更大; 1位可以移入先前爲1的符號,使得數字更小;一個1位可以移入先前爲0的符號,使得數字更小。
  • 無符號右移:好的這個很簡單,數字變小了。
  • 簽名右移:負數變大,正數變小。

我爲左移而不是右移寫「解釋」的原因是隻有一種左移,但取決於您是否將結果解釋爲有符號或無符號,它具有「不同的「結果(當然這些位是相同的)。但是實際上有兩種不同的右移,一種是保持符號,而右無符號右移只是0位(也有一個有符號的解釋,但通常並不重要)。