摘要:簡單了解位運算簡單了解基礎位運算符是在數字底層表示數字的個數位上進行操作的。注意位的位置在最右側。諾,就是這樣的顯示就是這樣的位運算符與兩個都為結果才為保持數位對齊,用上述規則然后進行與運算。
簡單了解位運算 簡單了解基礎
位運算符是在數字底層(表示數字的32個數位)上進行操作的。
所有整數字面量都是有符號整數,用31位表示數值,用第32位表示符號,0表示正數1表示負數。數值范圍從-(2^31 - 1)到(2^31 - 1)。注意位0的位置在最右側。
0是所有位為0
-1是所有位為1
-2147483648是除了最左邊為1,其他都是0
2147483647是除了最左邊為0外,其他都是1的整數。
正數是以真二進制形式存儲的,前 31 位中的每一位都表示 2 的冪,從第 1 位(位 0)開始,表示 2^0,第 2 位(位 1)表示 2^1。沒用到的位用 0 填充,即忽略不計。
var num = 18; (num).toString(2); //10010(18 = 2^4+2^1)
負數也存儲為二進制代碼,不過采用的形式是二進制補碼
直接來例子,求-18的補碼
(1)求該數字非負版本的二進制。這里也就是18的二進制(10010)
(2)求二進制反碼,也就是1變成0,0變成1(1111 1111 1111 1111 1111 1111 1110 1101)
(3)在反碼的基礎上加一,注意二進制里的運算1+1=10(1111 1111 1111 1111 1111 1111 1110 1110)
但是呢,ECMAScript并不以這種二進制補碼來表示負數,而是用數字絕對值的標準二進制代碼前面加上負號的形式輸出。
//諾,就是這樣 var num = -18; (num).toString(2); //-10010,“-18的顯示就是這樣的”位運算符
與 & 兩個都為1 結果才為1
保持數位對齊,用上述規則然后進行與運算。
或 | 兩個都為0時,結果才為0
保持數位對齊,用上述規則然后進行或運算。
非 ~ 0變1,1變0
其實就是對數字求負,然后減一
var num = 25; var num1 = ~num; num1; //-26
異或 ^ 兩個相同為0,不同為1
滿足交換律,一個數和自己異或的結果是0,任何數x與0異或的結果都是本身x,任何數x與-1異或的結果都是-x。
左移 << 各二進位全部左移若干位,高位丟棄,右側低位補0
var old = 2; //10 var new = old << 5; //1000000
右移 >> 各二進位全部右移若干位,有符號數,用符號位的值填充這些空位。
一些小技巧(1)判斷奇偶(貌似很實用啊)
//一般都是(i % 2 !== 0)來判斷奇數 if(i & 1) { //奇數需要進行的事情 } else { //偶數需要做的事情 }
(2)交換兩個數字
一般需要一個中間變量,
var temp = a; var a = b; var b = temp;
可以用位操作符實現交換不需要中間變量
a ^= b; //a = a ^ b b ^= a; //b = b ^ a = b ^ a ^ b = a (b = a) a ^= b; //a = a ^ b = a ^ b ^ a = b;
(3)變換符號
只需要求反后加1即可
function rever (n) { return ~n + 1; } //11 => -11
(4)求絕對值
對于負數對其取反后加1來得到正數。先移位取得符號位i >> 31
var i = a >> 31 //如果a為正數,i為0。如果a為負數,i為-1 return i == 0 ? a : (~a + 1); //正數保持不變,負數變換符號。
另一種方法
可以通過異或,參考異或的規則。a與i異或后減i(即加0或者加1)
var i = a >> 31; return (a ^ i) - i;
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/81977.html
摘要:將補數的概念用到計算機中,便出現了補碼這種機器數。通常,從原碼形式入手來求補碼。它與補碼的區別是末位少加一個,因此很容易從補碼的定義推出反碼的定義。若真值為純小數,它的反碼形式為其中表示符號位。 一、原碼表示法 原碼表示法是一種最簡單的機器數表示法,其最高位為符號位,符號位為0時表示該數為正,符號位為1時表示該數為負,數值部分與真值相同。若真值為純小數,它的原碼形式為Xs,.X1X2X...
摘要:將補數的概念用到計算機中,便出現了補碼這種機器數。通常,從原碼形式入手來求補碼。它與補碼的區別是末位少加一個,因此很容易從補碼的定義推出反碼的定義。若真值為純小數,它的反碼形式為其中表示符號位。 一、原碼表示法 原碼表示法是一種最簡單的機器數表示法,其最高位為符號位,符號位為0時表示該數為正,符號位為1時表示該數為負,數值部分與真值相同。若真值為純小數,它的原碼形式為Xs,.X1X2X...
摘要:二進制本身就是為這個數字而使用的,所以說這道面試題直指二進制的使用是沒錯的。正負在二進制中,第一位為的是負數,是正數。 showImg(https://segmentfault.com/img/bVbd7d0?w=1580&h=732); 前言 使用PHP,給定一個數,判斷這個數是否是二的N次方 這樣看似簡單的一個面試題, 實際牽出了很多基礎知識,本章在為大家補習基礎知識的情況下來解答...
摘要:位運算符是對其操作數按其二進制形式逐位進行運算。接下來我們逐一講解位運算符的計算原理按位與用于清零取某些指定位保位的計算原理,,結果上面使用按位與的一段程序運行結果為我們用二進制來分析一下它的計算規則。 C語言中位運算符共有六種 目錄 1.&(按位與) 2. |(按位或) 3.^(按位抑或)...
摘要:前言最近,朋友問了我這樣一個問題在中的運算結果,為什么是這樣的雖然我告訴他說,這是由于浮點數精度問題導致的。由于可以用階碼移動小數點,因此稱為浮點數。它的實現遵循標準,使用位精度來表示浮點數。 showImg(https://segmentfault.com/img/remote/1460000018981071); 前言 最近,朋友 L 問了我這樣一個問題:在 chrome 中的運算...
閱讀 2793·2021-09-23 11:44
閱讀 1681·2021-09-13 10:24
閱讀 2629·2021-09-08 09:36
閱讀 1238·2019-08-30 15:54
閱讀 2258·2019-08-30 13:54
閱讀 3317·2019-08-30 10:57
閱讀 1856·2019-08-29 18:43
閱讀 3622·2019-08-29 15:10