移位運算(shifting operation)是C#中一種特殊的運算,其原理是根據數值存儲在計算機內存中以二進制的標准,進行前移或者后移若干位的算法。根據題目來看,無符號位的數字移動“左”、“右”有以下規律:
1)左移:將每個二進制的數字往左邊移動若干位(若干位:符號“<<”后面的數字,不足以0補充)。
2)右移:將每個二進制的數字往右邊移動若干位(若干位:符號“>>”后面的數字,不足以最高位的數字補充)。
下面給出具體例子:
【例】計算2<<2和2>>2:
在計算機中,正整數2的源碼=反碼=補碼=0000 0010,往左邊每個數字移動2位之后,最高的兩位溢出(丟棄),又因為符號位(最高位為0),因此補充兩個0,變成0000 1000=>8.
反之,0000 0010右移動2為去掉右邊的兩個數字,在最高位上添加兩個0,變成0000 0000=>0
【重要結論】
1)左移和右移n位,相當於去掉前面和后面對應的若干位,再補充。
2)當左移動是2的時候,可以看成是某個數×2的n次方,反之除以2的n次方。
1)左移:將每個二進制的數字往左邊移動若干位(若干位:符號“<<”后面的數字,不足以0補充)。
2)右移:將每個二進制的數字往右邊移動若干位(若干位:符號“>>”后面的數字,不足以最高位的數字補充)。
下面給出具體例子:
【例】計算2<<2和2>>2:
在計算機中,正整數2的源碼=反碼=補碼=0000 0010,往左邊每個數字移動2位之后,最高的兩位溢出(丟棄),又因為符號位(最高位為0),因此補充兩個0,變成0000 1000=>8.
反之,0000 0010右移動2為去掉右邊的兩個數字,在最高位上添加兩個0,變成0000 0000=>0
【重要結論】
1)左移和右移n位,相當於去掉前面和后面對應的若干位,再補充。
2)當左移動是2的時候,可以看成是某個數×2的n次方,反之除以2的n次方。
移位運算是對2進制操作的,
intmax 的2進制是 11111111111111111111111111111111 將其左移八位用零補足得到
11111111111111111111111100000000結果為4294967040
intmax 的2進制是 11111111111111111111111111111111 將其左移八位用零補足得到
11111111111111111111111100000000結果為4294967040