日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JavaScript 位運算符

瀏覽:20日期:2023-11-23 16:11:49

JavaScript 在日常的應用中非常的少,其實當年在大學學習C#的時候,位運算符也不是重點,而且后來考試的時候根本就沒有考這章,但是對于對數(shù)字感興趣的我,當時聽的特認真,以至于雖然從來都沒再看過,印象還是非常的深刻,前幾天在用的時候進入了個誤區(qū),所以這里還是記錄一下,鞏固一下哈~

JavaScript 的位運算符一共有7個,分別是&、|、^、~、<<、>>、>>>(C#沒有這個運算符,但是C#可以通過>>的邏輯右移來實現(xiàn)此運算),位運算的操作都是通過二進制進行的。

按位與運算符(&)

當兩個數(shù)相同位都為1時返回1,否則返回0,例如1&2=0,1的二進制表示為0001,2的二進制表示為0010,二者的運算則返回0000。

按位或運算符(|)

當兩個數(shù)相同位數(shù)字不同的時候返回1,否則返回0,例如1|2=3。

按位異或運算符(^)

當兩個數(shù)相同位僅有一個為1的時候返回1,否則返回0,例如1^2=3。

按位非運算符(~)

~是一個一元運算符,它將所有位數(shù)取反。這里首先必須要說下負數(shù)的存儲,負數(shù)是以其正數(shù)的二進制補碼進行存儲的,所以我們在進行負數(shù)的運算時,必須要正確的獲取其二進制編碼,也就是其正數(shù)的二進制補碼。補碼是取反然后加1來實現(xiàn),下面看例子:

先計算3的反碼:3的二進制形式為00000011,其反碼為11111100,其補碼為11111101,所以-3的二進制編碼為11111101,那么我們要求~-3,就是取其反碼,為00000010,這就是-3的反碼,將其轉化為十進制為2。

多試幾個就會發(fā)現(xiàn),其實一個數(shù)的反碼就是其十進制的相反數(shù)減去1。

左移運算符(<<)

左移運算符就是將數(shù)的所有位集體左移,第一位變成第二位,第二位變成第三位。。。空出的新位用0補充。比如1<<2=4,-1<<2=-4。1的二進制表示為0000 0001,那么將其向左移動兩位變成了0000 0100,轉換為十進制就為4,-1的二進制表示為1111 1111,將其向左移動兩位,得到1111 1100,1開頭的為負數(shù),將其轉化為十進制則需要倒著執(zhí)行一次補碼的計算,就是先減去1,得到1111 1011,然后取反,得到0000 0100,轉化為十進制加負號得到4。這里需要注意下二進制的減法運算法則:1-1=0-0=0,1-0=1,0-1=1(向高位借)。

這里我們可以發(fā)現(xiàn)左移運算就是將其十進制數(shù)乘以2的位數(shù)次方。

帶符號的右移運算符(>>)

既然左移是乘以2,那么右移肯定應該是除以2了,事實上就是這樣子的,如果數(shù)字本身為正數(shù),則在高位補0,如果為負數(shù)則在高位補1。例如3>>1=1,-3>>1=-2。3的二進制編碼表示為0000 0011,將其向右移動1位,得到0000 0001,轉換為十進制就是1,-3的二進制編碼為1111 1101,將其向右移動1位得到1111 1110,這是一個負數(shù),負數(shù)轉化為十進制,先減一得到1111 1101,取反為0000 0010,得到-2。

帶符號的右移運算就是將其十進制數(shù)除以2的位數(shù)次方,并舍棄余數(shù)。

無符號的右移運算符(>>>)

正數(shù)的無符號右移運算結果跟帶符號的右移運算是一樣的,主要是負數(shù)的無符號右移運算。它跟帶符號的右移的區(qū)別就在于,不管是正數(shù)還是負數(shù),高位都以0補充,所以對正數(shù)來說帶符號和無符號的運算都是一樣的,而對于負數(shù)來說則是天壤之別。例如:-1>>&gt1=2147483647,數(shù)字很恐怖是吧,看看計算過程:-1的二進制編碼為1111 1111 1111 1111 1111 1111 1111 1111,將其右移1位,并補0,得到0111 1111 1111 1111 1111 1111 1111 1111,第一位為0,是正數(shù),將其轉化為十進制就是230+229+……+20=230(1-1/231)/(1-1/2)=231-1=2147483647,這樣最終得到了我們需要的結果,結果很恐怖,慎用!

位運算符的應用:

談了這么久,最終的目的還是為了去用這些運算符,看些例子:

顏色的RGB值和十六進制的轉換:例如一個顏色值:#33cc10,前兩位代表紅色(R),中間兩位代表綠色(G),后兩位代表藍色(B),將其轉化為二進制編碼為:0011 0011 1100 1100 0001 0000(賦給color),首先我們要獲取紅色值,需要將其右移16位,color>>16,也就是0000 0000 0000 0000 0011 0011,這樣子我們獲取到R=51,那么我們要獲取綠色值就需要將其先右移8位,color>>8,得到0000 0000 0011 0011 1100 1100,然后將前八位變?yōu)?,0000 0000 0011 0011 1100 1100|0000 0000 0000 0000 1111 1111,得到0000 0000 0000 0000 1100 1100,這樣子我們得到G=204,最后取藍色值,就是簡單的將其前八位變?yōu)?,color | 0000 0000 0000 0000 0001 0000,我們得到B=16,#33cc10轉化為RGB值就是(51,204,16)。反過來RGB轉化為十六進制正好是反過來的方法,就是G << 16 | G << 8 | B,這里就不贅述啦。

判斷一個節(jié)點是否為另一個節(jié)點的父節(jié)點:比如有兩個節(jié)點a和b,ie的方法是a.contains(b)來確定a是否為b的子節(jié)點,而其它現(xiàn)代瀏覽器使用的方法是a.compareDocumentPosition(b),這個返回結果并不是一個boolean值,如果a和b是同一個節(jié)點則返回0,a和b在不同的document內或者至少有一個在document之外則返回1,如果b在a之前則返回2,a在b之前則返回4,b包含a則返回8,a包含b則返回16,32則為瀏覽器獨享。0、1、2、4、8、16的二進制編碼分別為0000 0000、0000 0001、0000 0010、0000 0100、0000 1000、0001 0000,我們可以通過判斷a.compareDocumentPosition(b) & 16轉化為boolean是true還是false來判斷a是否為b的節(jié)點,那么為什么不用a.compareDocumentPosition(b) == 16判斷呢?因為a.compareDocumentPosition(b)返回的應該是20(4+ 16),所以倒可以用a.compareDocumentPosition(b) == 20來運算,用&運算符的好處在于我們不需要考慮這些,我們只需要考慮它和我們需要的值16的&運算是否可以返回true。(John Resig有一個模擬compareDocumentPosition的方法,讓其在ie下同樣適用,有興趣的可以參考文末的鏈接~)

按位左移運算:我們知道按位左移1位,就是乘以2,那么我們可以用a<<1來代替a*2,因為位運算的效率要快于普通運算(有時候可能會得到相反的結果,JavaScript 中位運算的速度非常的差,跟 C# 差的太遠啦~)。

按位右移:一方面,可以用a>>1替代a/2,另外按位右移可以方便的將小數(shù)轉化為整數(shù),如3.1415>>0=3,因為按位移運算會將運算數(shù)必須為整型(詳細請參考 ECMA-262 手冊),所以操作后將舍棄小數(shù)位~

:位運算符要求它的數(shù)字運算數(shù)是整型的,并且這些運算數(shù)是用32位的整數(shù)來表示的,第32位是符號位。而且運算數(shù)限制在32位的整數(shù)范圍內,同時要求右邊的運算數(shù)在0到31之間。(本文二進制編碼并不規(guī)范,僅為方便使用~)

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩亚洲一区二区三区在线| 91看片一区| 国产精品美女久久久| 欧美日韩99| 久久亚洲风情| 亚洲最大av| 亚洲ab电影| 国产精品天堂蜜av在线播放| 国产美女久久| 国产高清精品二区| 黄色aa久久| 久久青草久久| 自拍日韩欧美| 亚洲精品一区二区在线播放∴| 日韩av一区二区在线影视| 欧美日韩国产一区二区在线观看| 国产精品中文字幕制服诱惑| 精品视频网站| 激情综合亚洲| 亚州精品视频| 国产精品宾馆| 日韩精品欧美| 国产一区白浆| 久久国产精品免费一区二区三区| 精品日韩在线| 美女少妇全过程你懂的久久| 亚洲日本久久| 老司机精品视频在线播放| 日韩啪啪电影网| 亚洲精品123区| 日韩**一区毛片| 精品99久久| 亚洲一区二区三区免费在线观看 | 蜜桃av一区| 日韩国产精品久久久久久亚洲| 精品午夜av| 亚洲欧美日韩国产| 久久av网址| 99精品美女| 日韩欧美另类中文字幕| 成人综合一区| 老鸭窝毛片一区二区三区| 国产欧美视频在线| 四虎4545www国产精品| 亚洲精品动态| 中文字幕在线高清| 亚洲欧美一级| 不卡福利视频| 国产不卡av一区二区| 日韩伦理在线一区| 国产美女亚洲精品7777| 丝袜美腿亚洲色图| 视频福利一区| 国产一区二区精品福利地址| 日韩精品第一| 日韩制服丝袜先锋影音| 成人日韩在线观看| 久久精品国产福利| 亚洲精品一区二区在线播放∴| 91精品一区国产高清在线gif| 亚洲91精品| 伊人影院久久| 国产成人免费| 亚洲精品伦理| 久久久人人人| 国产激情精品一区二区三区| 国产农村妇女精品一区二区| 91视频一区| 69精品国产久热在线观看| 亚洲h色精品| 免费在线成人| 亚洲人妖在线| 欧美国产91| 国产一区日韩| 日本不卡的三区四区五区| 欧美日韩在线播放视频| 亚洲a一区二区三区| 国产欧美一区二区三区精品观看 | 亚洲欧美日韩国产一区二区| 精品视频高潮| 91麻豆精品激情在线观看最新| 伊人久久婷婷| 蜜臀国产一区| 欧美成a人片免费观看久久五月天| 午夜精品亚洲| 深夜福利视频一区二区| 国产欧美一区二区精品久久久| 老司机久久99久久精品播放免费| 精品国产一区二| 国产精选一区| 日本伊人午夜精品| 日韩一区二区免费看| 国产精品成久久久久| 国产精品毛片久久久| 久色成人在线| 最新亚洲激情| 91精品一区国产高清在线gif| 国产一区二区亚洲| 国产高清日韩| 综合欧美精品| 亚洲欧美日本国产专区一区| 亚洲国产专区| 久久蜜桃资源一区二区老牛| 日韩精品dvd| sm捆绑调教国产免费网站在线观看 | 婷婷精品在线| 欧美一级专区| 日韩午夜黄色| 五月综合激情| 性欧美xxxx免费岛国不卡电影| 精品三级av| 麻豆国产精品| 久久精品国产成人一区二区三区| 国产精品片aa在线观看| 国产精品一区二区美女视频免费看| 日韩精彩视频在线观看| 日韩一区二区三区四区五区| 在线看片一区| 日本综合精品一区| 7m精品国产导航在线| 久久国产三级| 免费亚洲一区| 国产精品99视频| 成人片免费看| 久久久噜噜噜| 在线日韩欧美| 五月天久久777| 免费看欧美美女黄的网站| 日韩中文欧美在线| 午夜天堂精品久久久久| 日韩欧美中文在线观看| 国产日韩高清一区二区三区在线 | 久久精品亚洲欧美日韩精品中文字幕| 日韩欧美一区二区三区在线视频| 日韩欧美精品综合| 欧美一区二区三区高清视频 | 成人亚洲精品| 日韩高清欧美| 亚洲黑丝一区二区| 国产精品毛片| 日韩精品免费视频人成| 欧美一区=区三区| 久久免费影院| 久久久夜精品| 欧美中文字幕| 欧美亚洲福利| 国产成人精品三级高清久久91| 亚洲永久av| 在线亚洲观看| 日韩av网站在线观看| 国产精品伦一区二区| а√天堂中文在线资源8| 欧美精品九九| 日韩精品成人| 超级白嫩亚洲国产第一| 最新国产拍偷乱拍精品| 日韩欧美中文字幕在线视频| 久久久久97| 激情婷婷亚洲| 日韩高清在线不卡| 色综合五月天| 伊人影院久久| 91福利精品在线观看| 高清av不卡| 天堂va蜜桃一区二区三区| 日本成人手机在线| 国产96在线亚洲| 国产精品婷婷| 久久中文在线| 亚洲在线网站| 久久在线91| 一区二区亚洲精品| 国产精品色婷婷在线观看| 99精品视频在线| 欧美在线首页| 宅男在线一区| 国产午夜久久av| 久久国产电影| 国产欧美二区| 国产一区二区中文| 欧美一区二区三区久久精品| 久久国产免费| 国产丝袜一区| 亚洲特级毛片| 国产精品亚洲欧美日韩一区在线| 久久精品国产99久久| 久久精品 人人爱| 欧美日韩激情| 美女在线视频一区| 水野朝阳av一区二区三区| 国产一区二区三区成人欧美日韩在线观看| 国产农村妇女精品一二区| 粉嫩av一区二区三区四区五区 | 国产中文一区| 九九99久久精品在免费线bt| 日韩在线一二三区| 欧美日韩在线观看首页| 日韩av一级片| 模特精品在线| 久久精品亚洲人成影院|