真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Javascript中“&”和“|”的示例分析-創(chuàng)新互聯(lián)

這篇文章主要為大家展示了“Javascript中 “&” 和 “|” 的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Javascript中 “&” 和 “|” 的示例分析”這篇文章吧。

創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站制作、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)嵩縣,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):13518219792

一、前言:

在文章開(kāi)始之前,先出幾個(gè)題目給大家看看:

var num1 = 1 & 0;
console.log(num1); // 0
var num2 = 'string' & 1;
console.log(num2); // 0
var num3 = true & 1;
console.log(num3); // 1 
var num4 = undefined | false;
console.log(num4); // 0 
var num5 = undefined | true;
console.log(num5); // 1 
var num6 = 23 & 5;
console.log(num6); // 5
var num7 = 23 | 5;
console.log(num7); // 23

上面的題目大家都做對(duì)了嗎?我們之前有總結(jié)過(guò) 《淺談javascript中的 “ && ” 和 “ || ” 》,"&&” 和 “||” 是邏輯運(yùn)算表達(dá)式中的操作符。那么一個(gè) “&” 或者一個(gè) “|” 又代表什么含義呢?有什么特性呢?接下來(lái),我們就來(lái)一一揭秘。

首先,我們得清楚 “&” 和 “|” 是位運(yùn)算操作符。

位運(yùn)算符用于在最基本的層次上,即按內(nèi)存中表示數(shù)值的位來(lái)操作數(shù)值。ECMAScript中的所有數(shù)值都以IEEE-754 64位格式存儲(chǔ),但位操作符并不直接操作64位的值。而是先將64位的值轉(zhuǎn)換成32位的整數(shù),然后執(zhí)行操作,最后再將結(jié)果轉(zhuǎn)換為64位。對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),由于64位存儲(chǔ)格式是透明的,因此整個(gè)過(guò)程就像是只存在32位的整數(shù)一樣。

對(duì)于有符號(hào)的整數(shù),32位中的前31位用于表示整數(shù)的值。第32位表示數(shù)值的符號(hào):0表示正數(shù),1表示負(fù)數(shù)。這個(gè)表示符號(hào)的位叫做符號(hào)位,符號(hào)位的值決定了其他位數(shù)值的格式。其中,正數(shù)以純二進(jìn)制格式存儲(chǔ),31位中的每一位都表示2的冪。第一位(叫做位0)表示20,第二位表示21,以此類推。沒(méi)有用到的位以0表示,即忽略不計(jì)。例如,數(shù)值18的二進(jìn)制表示是0000 0000 0000 0000 0000 0000 0001 0010,或者更簡(jiǎn)潔的10010。這是5個(gè)有效位,這5位本身就決定了實(shí)際的值。

負(fù)數(shù)同樣以二進(jìn)制碼存儲(chǔ),但使用的格式是二進(jìn)制補(bǔ)碼。計(jì)算一個(gè)數(shù)值的二進(jìn)制補(bǔ)碼,需要經(jīng)過(guò)下列3個(gè)步驟:

(1)求這個(gè)數(shù)值絕對(duì)值的二進(jìn)制碼(例如,要求-18的二進(jìn)制補(bǔ)碼,先求18的二進(jìn)制碼);

(2)求二進(jìn)制反碼,即將0替換為1,將1替換為0;

(3)得到的二進(jìn)制反碼加1。

這樣,求得了-18的二進(jìn)制表示,即1111 1111 1111 1111 1111 1111 1110 1110。

......在ECMAScript中,當(dāng)對(duì)數(shù)值應(yīng)用位操作符時(shí),后臺(tái)會(huì)發(fā)生如下轉(zhuǎn)換過(guò)程:64位的數(shù)值被轉(zhuǎn)換成32位數(shù)值,然后執(zhí)行位操作,最后再將32位的結(jié)果轉(zhuǎn)換回64位數(shù)值。這樣,表面上看起來(lái)就好像是在操作32位數(shù)值,就跟在其他語(yǔ)言中以類似方式執(zhí)行二進(jìn)制操作一樣。但這個(gè)轉(zhuǎn)換過(guò)程也導(dǎo)致了一個(gè)嚴(yán)重的副效應(yīng),即在對(duì)特殊的NaN和Infinity值應(yīng)用位操作時(shí),這兩個(gè)值都會(huì)被當(dāng)成0來(lái)處理。

如果對(duì)非數(shù)值應(yīng)用位操作符,會(huì)先使用Number()函數(shù)將該值轉(zhuǎn)換為一個(gè)數(shù)值(自動(dòng)完成),然后再應(yīng)用位操作。得到的結(jié)果將是一個(gè)數(shù)值。 ......(截取自《Javascript高級(jí)程序設(shè)計(jì)》)

二、“&”(按位與AND):

按位與操作符由一個(gè)和號(hào)字符(&)表示,它有兩個(gè)操作符數(shù)。從本質(zhì)上來(lái)講,按位與操作就是將兩個(gè)數(shù)值的每一位對(duì)齊,對(duì)相同位置上的兩個(gè)數(shù)執(zhí)行AND操作。

按位與AND操作規(guī)則:只有兩個(gè)數(shù)值的對(duì)應(yīng)位都是1時(shí)才返回1,任何一位是0,結(jié)果都是0。

前面已經(jīng)把理論性的東西說(shuō)的太多了,但是我覺(jué)得理論又很有必要。接下來(lái),直接分析例子吧!

我們先看上面題目中的 num1,num2,num3以及num6。我們嘗試結(jié)合上面的理論來(lái)分析為什么會(huì)輸出最終的結(jié)果。

// num1是1和0進(jìn)行“按位與”操作后的返回值。1的二進(jìn)制碼簡(jiǎn)寫(xiě)為1,0的二進(jìn)制碼簡(jiǎn)寫(xiě)為0,根據(jù)上面的規(guī)則,第二個(gè)操作符數(shù)為0,結(jié)果是0
var num1 = 1 & 0;
console.log(num1); // 0 
// 第一個(gè)操作符數(shù)是字符串,按照前言里面的理論,對(duì)于非數(shù)值的操作符數(shù),先使用Number()函數(shù)處理,結(jié)果返回NaN,NaN又會(huì)被當(dāng)成0來(lái)處理。所以最終結(jié)果也是0
var num2 = 'string' & 1;
console.log(num2); // 0
// true是布爾類型值,同樣使用Number()函數(shù)處理,處理后得到數(shù)值1,于是表達(dá)式就相當(dāng)于“1 & 1” 進(jìn)行位運(yùn)算,當(dāng)兩個(gè)數(shù)值都為1的時(shí)候,結(jié)果返回1
var num3 = true & 1;
console.log(num3); // 1
// 23的二進(jìn)制碼是:...10111,5的二進(jìn)制碼是:...00101。然后每一位進(jìn)行對(duì)齊處理,結(jié)合上面的規(guī)則,可以得出10111&00101的結(jié)果是:00101。00101就是5
var num6 = 23 & 5;
console.log(num6); // 5 
// 再加個(gè)例子:24的二進(jìn)制碼為...11000,7的二進(jìn)制碼為...00111,相同位置的兩個(gè)數(shù)執(zhí)行AND操作,結(jié)果發(fā)現(xiàn)結(jié)果是...00000。所以最終結(jié)果是0,你算對(duì)了嗎?
var add1 = 24 & 7;
console.log(add1); // 0

三、“|”(按位或OR):

按位或操作符由一個(gè)豎線符號(hào)(|)表示,同樣有兩個(gè)操作符數(shù)。從本質(zhì)上來(lái)講,按位或操作也是將兩個(gè)數(shù)值的每一位對(duì)齊,對(duì)相同位置上的兩個(gè)數(shù)執(zhí)行OR操作。

按位或OR操作規(guī)則:只要兩個(gè)數(shù)值的對(duì)應(yīng)位有一個(gè)是1就返回1,而只有在兩個(gè)位都是0的情況下才返回0。

我們接最上面的例子來(lái)看吧!

// 第一個(gè)操作符數(shù)為undefined,第二個(gè)操作符數(shù)是false,均不是數(shù)值,所以都要先使用Number()函數(shù)處理,處理結(jié)果都是返回NaN,NaN又會(huì)被當(dāng)成0處理,于是最終結(jié)果是0
var num4 = undefined | false;
console.log(num4); // 0
// 第一個(gè)操作符數(shù)相當(dāng)于0,第二個(gè)操作符數(shù)相當(dāng)于1,結(jié)合按位或的規(guī)則,最終結(jié)果是1
var num5 = undefined | true;
console.log(num5); // 1
// 23的二進(jìn)制碼是:...10111,5的二進(jìn)制碼是:...00101。然后每一位進(jìn)行對(duì)齊處理,結(jié)合上面的規(guī)則,可以得出10111|00101的結(jié)果是:10111。10111就是23
var num7 = 23 | 5;
console.log(num7); // 23
// 再加個(gè)例子:24的二進(jìn)制碼為...11000,7的二進(jìn)制碼為...00111,相同位置的兩個(gè)數(shù)執(zhí)行AND操作,結(jié)果發(fā)現(xiàn)結(jié)果是...11111。所以最終結(jié)果是31,你算對(duì)了嗎?
var add2 = 24 | 7;
console.log(add2); // 31

四、其他:

相信也會(huì)有一些朋友不知道怎么把數(shù)值轉(zhuǎn)換成標(biāo)準(zhǔn)的二進(jìn)制碼,那么有沒(méi)有快速的方法呢?答案是肯定的。

我的網(wǎng)上隨機(jī)找到了一個(gè)在線轉(zhuǎn)換工具地址:數(shù)值進(jìn)制轉(zhuǎn)換(點(diǎn)我查看)。(當(dāng)然,你也可以使用你找到的別的工具,不管怎樣,能實(shí)現(xiàn)效果就是我們的最終目的)

最后,再附上我通過(guò)手寫(xiě)轉(zhuǎn)換二進(jìn)制過(guò)程中總結(jié)的規(guī)律圖,依然可以快速將數(shù)值轉(zhuǎn)換成二進(jìn)制碼,逼格滿滿噠!

Javascript中 “&” 和 “|” 的示例分析

以上是“Javascript中 “&” 和 “|” 的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


新聞名稱:Javascript中“&”和“|”的示例分析-創(chuàng)新互聯(lián)
文章URL:http://weahome.cn/article/poids.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部