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