javascript
javascript进制转换_「js基础」JavaScript逻辑和位运算符归纳
上一篇文章呢,我們講述了JavaScript運算符中的關系運算符和邏輯運算符,那么緊接上一篇的文章我們今天來說說邏輯運算符。
引言
邏輯運算符不是很難,也不是很多,我們只要記住三個就可以啦!分別是:
跟我們上初中判斷命題的真假一樣,返回的結果無異于真“或”者“假”,原理上都是一樣的,還有沒有小伙伴記得啊?如下圖:
命題的真假判斷
JavaScript邏輯運算符也是一樣的,我們先看看下圖:
邏輯運算符
其中expr可能是任何一種類型, 不一定是布爾值
邏輯非(!)
簡單說就是不是(not)的意思,符合雙重否定變肯定的旨意。
//給定 x=6 以及 y=3!(x==y) 為 true規則:
特性:
1、如果運算數的值為false,則返回true,否則返回false。
2、連續使用兩次,可將任意類型轉化為布爾型值。
邏輯與(&&)
簡單說就是和(and)的意思。
//給定 x=6 以及 y=3(x < 10 && y > 1) 為 true規則:
例如:
var str = new Array(); console.log(str&&8);//返回值為8console.log(8&&null);//返回結果為null特性:
1、當且僅當兩個運算數的值都是true時,才返回true,否則返回false。
2、短路操作:當第一個操作數的值為false時,則不再對第二個操作數進行求值。
邏輯與,邏輯非都遵循從左向右判斷,誰的第一個操作數邏輯判斷為true就返回誰,只不過邏輯非必須兩個都為true,而且誰是第一個false就返回誰。
邏輯或(||)
簡單說就是或(or)的意思。
//給定 x=6 以及 y=3(x==5 || y==5) 為 false規則:
特性:
1、當且僅當兩個運算數的值都為false時,才會返回false,否則返回true。
2、如果第一個操作數值為true,則不會對第二個操作數進行求值。
位運算符
按位操作符(Bitwise operators) 將其操作數(operands)當作32位的比特序列(由0和1組成),而不是十進制、十六進制或八進制數值。例如,十進制數9,用二進制表示則為1001。按位操作符操作數字的二進制形式,但是返回值依然是標準的JavaScript數值。
JavaScript中的按位操作符
有符號32位整數
所有的按位操作符的操作數都會被轉成補碼(two's complement)形式的有符號32位整數。補碼形式是指一個數的負對應值(negative counterpart)(如 5和-5)為數值的所有比特位反轉后,再加1。反轉比特位即該數值進行’非‘位運算,也即該數值的反碼。例如下面為整數314的二進制編碼:
00000000000000000000000100111010下面編碼 ~314,即 314 的反碼:
11111111111111111111111011000101補碼保證了當一個數是正數時,其最左的比特位是0,當一個數是負數時,其最左的比特位是1。因此,最左邊的比特位被稱為符號位(sign bit)。
0 是所有比特數字0組成的整數。
0 (base 10) = 00000000000000000000000000000000 (base 2)-1 是所有比特數字1組成的整數。
-1 (base 10) = 11111111111111111111111111111111 (base 2)-2147483648(十六進制形式:-0x80000000)是除了最左邊為1外,其他比特位都為0的整數。
-2147483648 (base 10) = 10000000000000000000000000000000 (base 2)2147483647(十六進制形式:0x7fffffff)是除了最左邊為0外,其他比特位都為1的整數。
2147483647 (base 10) = 01111111111111111111111111111111 (base 2)數字-2147483648 和 2147483647 是32位有符號數字所能表示的最小和最大整數。
按位邏輯操作符
從概念上講,按位邏輯操作符按遵守下面規則:
- 操作數被轉換成32位整數,用比特序列(0和1組成)表示。超過32位的數字會被丟棄。例如, 以下具有32位以上的整數將轉換為32位整數:
- 第一個操作數的每個比特位與第二個操作數的相應比特位匹配:第一位對應第一位,第二位對應第二位,以此類推。
- 位運算符應用到每對比特位,結果是新的比特值。
& (按位與)
對每對比特位執行與(AND)操作。只有 a 和 b 都是 1 時,a AND b 才是 1。與操作的真值表如下:
9 (base 10) = 00000000000000000000000000001001 (base 2)14 (base 10) = 00000000000000000000000000001110 (base 2)14 & 9 (base 10) = 00000000000000000000000000001000 (base 2) = 8 (base 10)將任一數值 x 與 0 執行按位與操作,其結果都為 0。將任一數值 x 與 -1 執行按位與操作,其結果都為 x。
| (按位或)
對每一對比特位執行或(OR)操作。如果 a 或 b 為 1,則 a OR b 結果為 1。或操作的真值表:
9 (base 10) = 00000000000000000000000000001001 (base 2)14 (base 10) = 00000000000000000000000000001110 (base 2)14 | 9 (base 10) = 00000000000000000000000000001111 (base 2) = 15 (base 10)將任一數值 x 與 0 進行按位或操作,其結果都是 x。將任一數值 x 與 -1 進行按位或操作,其結果都為 -1。
^ (按位異或)
對每一對比特位執行異或(XOR)操作。當 a 和 b 不相同時,a XOR b 的結果為 1。異或操作真值表:
9 (base 10) = 00000000000000000000000000001001 (base 2)14 (base 10) = 00000000000000000000000000001110 (base 2)14 ^ 9 (base 10) = 00000000000000000000000000000111 (base 2) = 7 (base 10)將任一數值 x 與 0 進行異或操作,其結果為 x。將任一數值 x 與 -1 進行異或操作,其結果為 ~x。
~ (按位非)
對每一個比特位執行非(NOT)操作。NOT a 結果為 a 的反轉(即反碼)。非操作的真值表:
9 (base 10) = 00000000000000000000000000001001 (base 2)~9 (base 10) = 11111111111111111111111111110110 (base 2) = -10 (base 10)對任一數值 x 進行按位非操作的結果為 -(x + 1)。例如,~5 結果為 -6。
按位移動操作符
按位移動操作符有兩個操作數:第一個是要被移動的數字,而第二個是要移動的長度。移動的方向根據操作符的不同而不同。
按位移動會先將操作數轉換為大端字節序順序(big-endian order)的32位整數,并返回與左操作數相同類型的結果。右操作數應小于 32位,否則只有最低 5 個字節會被使用。
注:Big-Endian:高位字節排放在內存的低地址端,低位字節排放在內存的高地址端,
又稱為"高位編址"。
Big-Endian是最直觀的字節序:
①把內存地址從左到右按照由低到高的順序寫出;
②把值按照通常的高位到低位的順序寫出;
③兩者對照,一個字節一個字節的填充進去。
<< (左移)
該操作符會將第一個操作數向左移動指定的位數。向左被移出的位被丟棄,右側用 0 補充。
例如:9 << 2 得到 36:
>> (有符號右移)
該操作符會將第一個操作數向右移動指定的位數。向右被移出的位被丟棄,拷貝最左側的位以填充左側。由于新的最左側的位總是和以前相同,符號位沒有被改變。所以被稱作“符號傳播”。
例如, 9 >> 2 得到 2:
9 (base 10): 00000000000000000000000000001001 (base 2)9 >> 2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)>>> (無符號右移)
該操作符會將第一個操作數向右移動指定的位數。向右被移出的位被丟棄,左側用0填充。因為符號位變成了 0,所以結果總是非負的。(譯注:即便右移 0 個比特,結果也是非負的。)
對于非負數,有符號右移和無符號右移總是返回相同的結果。例如 9 >>> 2 和 9 >> 2 一樣返回 2:
9 (base 10): 00000000000000000000000000001001 (base 2)9 >>> 2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)但是對于負數卻不盡相同。 -9 >>> 2 產生 1073741821 這和 -9 >> 2 不同:
-9 (base 10): 11111111111111111111111111110111 (base 2)-9 >>> 2 (base 10): 00111111111111111111111111111101 (base 2) = 1073741821 (base 10)說到這里,本篇的邏輯運算符和位運算符我們就講到這里了,下期我們再講JavaScript數組。
想了解更多的前端技術,關注我,持續為您輸出干貨,謝謝!
總結
以上是生活随笔為你收集整理的javascript进制转换_「js基础」JavaScript逻辑和位运算符归纳的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 22个值得收藏的android开源码-U
- 下一篇: matlab用插值法plot,Matla