ecmascript 整數有兩種型別,即有符號整數(允許用正數和負數)和無符號整數(只允許用正數)。在 ecmascript 中,所有整數字面量預設都是有符號整數,這意味著什麼呢?
有符號整數使用 31 位表示整數的數值,用第 32 位表示整數的符號,0 表示正數,1 表示負數。數值範圍從 -2147483648 到 2147483647。-2147483648是補碼10000000000000000000000,即-0
二進位制使用有符號整數儲存資料
負數也儲存為二進位制**,不過採用的形式是二進位制補碼。計算數字二進位制補碼的步驟有三步:
確定該數字的非負版本的二進位制表示(例如,要計算 -18的二進位制補碼,首先要確定 18 的二進位制表示)
求得二進位制反碼,即要把 0 替換為 1,把 1 替換為 0
在二進位制反碼上加 1
要確定 -18 的二進位制表示,首先必須得到 18 的二進位制表示,如下所示:
0000 0000 0000 0000 0000 0000 0001 0010
接下來,計算二進位制反碼,如下所示:
1111 1111 1111 1111 1111 1111 1110 1101
最後,在二進位制反碼上加 1,如下所示:
1111 1111 1111 1111 1111 1111 1110 1101
1---------------------------------------
1111 1111 1111 1111 1111 1111 1110 1110
因此,-18 的二進位制表示即 1111 1111 1111 1111 1111 1111 1110 1110。記住,在處理有符號整數時,開發者不能訪問 31 位。
有趣的是,把負整數轉換成二進位制字串後,ecmascript 並不以二進位制補碼的形式顯示,而是用數字絕對值的標準二進位制**前面加負號的形式輸出。例如:
var inum = -18;
alert(inum.tostring(2)); //輸出 "-10010"
這段**輸出的是 "-10010",而非二進位制補碼,這是為避免訪問位 31。為了簡便,ecmascript 用一種簡單的方式處理整數,使得開發者不必關心它們的用法。
運算子名稱描述&
and如果兩位都是 1 則設定每位為 1|or
如果兩位之一為 1 則設定每位為 1
^xor
如果兩位只有一位為 1 則設定每位為 1
~not
反轉所有位
<<
零填充左位移
通過從右推入零向左位移,並使最左邊的位脫落。
>>
有符號右位移
通過從左推入最左位的拷貝來向右位移,並使最右邊的位脫落。
>>>
零填充右位移
通過從左推入零來向右位移,並使最右邊的位脫落。
二進位制位運算子
二進位制位運算子用於直接對二進位制位進行計算,一共7個。i i 0 上面這行 的意思就是將i 不管是整數或小數 轉為32位整數。利用這一特性,可以寫乙個函式,將任意數值轉為32位整數。function toint32 x toint32 1.001 1 toint32 1.999 1 toint32...
二進位制 位操作運算子
1,二進位制 資料在記憶體中是用二進位制儲存的,二進位制是指由0,1兩個元素組成。其常見的編碼方式有三種 原碼,反碼,補碼 2 位 記憶體中最小儲存單元是位,也稱為bit。常常用8個bit儲存乙個字元,即1byte 8bit。3 位操作 是指cpu對記憶體中的二進位制數進行操作。包括 與 或 異或 ...
二進位制位運算
與運算,6 3 2 或運算 6 3 7 異或運算 6 3 5 反碼 6 7 左移 3 2 12 3 2 2 12 右移 3 1 1 3 2 1 無符號右移 3 1 1 3 2 1 按位與,當兩位同時為1時才為1如 1 1 1 1 0 0 0 1 0 6 3相當於 0110 0011 0010 2 按...