C#中的移位元運算
在電腦裡面,對有符號類型數中的負數是以二進位補碼的形式儲存的,那麼怎樣得到該補碼形式的位元的十進位數值呢?
1) 對該二進位補碼形式的數的所有位(包括符號位)取反,然後1(二進位運算)。
2) 將得到的數當作一個無符號數計算出其十進位的值,前面加一個符號即得結果。
================================================================================
// 1 : 0 0000000 00000000 00000000 00000001
// -1 : 1 0000000 00000000 00000000 00000001 (原碼)
// -1 : 1 1111111 11111111 11111111 11111111 (補碼)
// -2 : 1 0000000 00000000 00000000 00000010 (原碼)
// -2 : 1 1111111 11111111 11111111 11111110 (補碼)
int num = -2;
int ret = num >> 1;
Console.WriteLine(ret);
// 在C#中對於移位操作,是對該數在電腦中的“二進位儲存形式的整體”來說的
//
// << (左移)就是:整體左移,在右邊空出來的位全部補零。
// >> (右移)就是:1.無符號數
// 整體右移,左邊空出來的位全部補零。
// 2.有符號數
// 整體右移,左邊空出來的位全部補該數的符號位。
//
// 得到的二進位形式的數即是結果。
================================================================================
JavaScript語言中得移位元運算:
<< (左移) >> (右移):如果是無符號數,就無所謂了,按整體移。若是有符號數,符號位不動,不參與移位。
>>> (無符號數的右移):全部看作是無符號數,左邊空出來的位補0。(返回一個無符號類型的數)