日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript 位运算总结拾遗

發(fā)布時間:2025/5/22 javascript 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript 位运算总结拾遗 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近補充了一些位運算的知識,深感位運算的博大精深,此文作為這個系列的總結篇,在此回顧下所學的位運算知識和應用,同時也補充下前文中沒有提到的一些位運算知識。

把一個數變?yōu)榇笥诘扔谠摂档淖钚〉?的冪


一個數為2的冪,那么該數的二進制碼只有最高位是1。

根據這個性質,我們來舉個栗子,比如有數字10,轉為二進制碼后為:

1 0 1 0

我們只需把 0 bit的位置全部用1填充,然后再把該二進制碼加1就ok了。而x | (x + 1)正好可以把最右邊的0置為1,可是問題來了,當二進制碼變成 1 1 1 1后,我們無法判斷二進制碼已經全是1了,繼續(xù)操作的話會變成1 1 1 1 1,于是,該法失敗...

我們可以采用類似迭代的方法,又有點分組的意思。因為最高位肯定是1,我們把init的數右移一位,和原數作與運算,這樣就能把次高位也置為1,然后繼續(xù)右移,這時最前面兩位都是1了,右移兩位后,做與運算,這時前四位都是1了:

function change2Pow(n) {if(!(n & (n-1)) && n > 0) return n;n |= n >>> 1;n |= n >>> 2;n |= n >>> 4;n |= n >>> 8;n |= n >>> 16;return n + 1; }

計算二進制中1的個數


leetcode中有一道這樣的題目-Number of 1 Bits,正好拿來驗證程序的正確性。

常規(guī)解法不用多說,直接上代碼:

var hammingWeight = function(n) {var ans = 0;while (n) {ans += n & 1;n >>>= 1;}return ans; };

因為題目中有說是unsigned int32的整數,所以要用有符號右移>>>來操作符號位。

位運算解法和求逆序一樣,也采用分組的思想。

我們以16位下的12345舉例(6個1),先寫出它的二進制碼表示:

0011000000111001

第一步:每兩個為一組,組內高低位相加

00 10 00 00 00 10 01 01

第二步:每四個為一組,組內高低位相加

0010 0000 0010 0010

第三步:每8個為一組,組內高低位相加

00000010 00000100

第四步,每16個為1組,組內高低位相加

0000000000000110

最后得到的數字6即為12345二進制碼中1的個數。而實際中,因為int32是32位的,所以一共要進行5步。求解思路和求逆序類似,逆序是要交換,所以要分別左移右移,而求1的個數是相加,所以只需移動一次就夠了。

完整代碼:

var hammingWeight = function(n) {n = ((n & 0xAAAAAAAA) >>> 1) + (n & 0x55555555);n = ((n & 0xCCCCCCCC) >>> 2) + (n & 0x33333333);n = ((n & 0xF0F0F0F0) >>> 4) + (n & 0x0F0F0F0F);n = ((n & 0xFF00FF00) >>> 8) + (n & 0x00FF00FF);n = ((n & 0xFFFF0000) >>> 16) + (n & 0x0000FFFF);return n; };

因為是unsigned int32,所以要用>>>如前所述。

再次擊敗100%的JavaScript code...

計算二進制中1的個數的奇偶性


我們可以先計算1的個數,然后再判斷奇偶。當然既然作為一道獨立的題目,肯定有更簡便的方法。

整個過程可以用分治來解。第1步統(tǒng)計相鄰2位的1的個數奇偶性,保存到這2位的低位中。第2步統(tǒng)計相鄰4位的1的個數奇偶性,保存到這4位的低位中。……第5步統(tǒng)計相鄰2位的1的個數奇偶性,保存到這32位的低位中,即x的最低位。

function bit1OddEven(x){ //奇數個為1,偶數個為0x ^= x >>> 1; //相鄰 2位中1的奇偶性x ^= x >>> 2; //相鄰 4位中1的奇偶性x ^= x >>> 4; //相鄰 8位中1的奇偶性x ^= x >>> 8; //相鄰16位中1的奇偶性x ^= x >>> 16; //相鄰32位中1的奇偶性return x & 1; }

統(tǒng)計二進制前導0、末尾0的個數


先排除為0的特殊情況。然后先看前16位是否全0,如果全0,增加計數,并把這個數左移16位刪除已經計數的16個0。然后看前8位是否全0。一直到只剩一位時可以直接計算。整個過程的核心是二分思想

統(tǒng)計末尾0的個數時思想類似,只是變成了統(tǒng)計后面16位、8位等是否全0。

function countLeading0(x) {if (!x) return 32;var n = 1;if ((x >>> 16) == 0) n += 16, x <<= 16;if ((x >>> 24) == 0) n += 8, x <<= 8;if ((x >>> 28) == 0) n += 4, x <<= 4;if ((x >>> 30) == 0) n += 2, x <<= 2;return n - (x >>> 31); }function countTrailing0(x) {if (!x) return 32;var n = 1;if ((x << 16) == 0) n += 16, x >>>= 16;if ((x << 24) == 0) n += 8, x >>>= 8;if ((x << 28) == 0) n += 4, x >>>= 4;if ((x << 30) == 0) n += 2, x >>>= 2;return n - (x & 0x01); }

當然計算末尾0的個數,我們也可以這樣:

function countTrailing0(a) {return Math.log(a & (-a)) / Math.LN2; }

這個系列暫時結束了,但我知道對于位運算的學習,這只是起點。

附位運算系列目錄

  • javascript 位運算
  • 常用位運算整理
  • 【位運算經典應用】 標志位與掩碼
  • 【位運算經典應用】 N皇后問題
  • 【位運算經典應用】 求二進制逆序
  • 【位運算經典應用】 尋找那個唯一的數
  • leetcode - 位運算題目匯總(上)
  • leetcode - 位運算題目匯總(下)
  • JavaScript 位運算總結&拾遺
  • 《新程序員》:云原生和全面數字化實踐50位技術專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的JavaScript 位运算总结拾遗的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 中文字幕人妻一区二 | av网站免费播放 | 性感少妇在线观看 | 欧美精品一区二 | 男女性杂交内射妇女bbwxz | 国产一级片a | 男生和女生差差的视频 | 国产精品高潮呻吟久久久久久 | 三级视频在线观看 | 国产美女流白浆 | 国产成人三级在线观看 | 麻豆精品国产精华精华液好用吗 | 日韩福利一区二区 | 中文字幕亚洲欧美 | 国精品无码人妻一区二区三区 | 亚洲第一色站 | 欧美精品视 | 中文字幕日韩欧美在线 | 亚洲日本成人在线观看 | 国产网站无遮挡 | 亚洲天堂成人在线观看 | 黄色动漫软件 | 成人久久一区二区 | av久热 | 国产精品二区一区二区aⅴ污介绍 | 青娱乐国产在线视频 | 白白色免费视频 | 日本高清网站 | 三级网站在线免费观看 | 中文字幕第27页 | 97久久综合 | 最新毛片基地 | 精品久久久久久无码中文野结衣 | 超碰96在线 | 四虎影成人精品a片 | 日韩在线观看不卡 | 亚洲三级在线视频 | 国产福利片在线观看 | 国产网站在线免费观看 | 成人区人妻精品一区二 | 大陆一级黄色片 | 一区在线免费观看 | 美女xx00| 久久久久久久毛片 | 国产精品资源在线观看 | 国产麻豆成人 | 亚洲乱子伦 | 51精品国产人成在线观看 | 久久艹这里只有精品 | 久久久久国产精品熟女影院 | 久一国产| 91porn九色 | 亚洲欧美另类日本 | 麻豆av影院 | 女人高潮被爽到呻吟在线观看 | 琪琪电影午夜理论片八戒八戒 | 女生喷液视频 | 嫩色av | 性欧美另类 | 精品少妇一区二区三区免费观看 | av88av| 久久一热 | 久婷婷| 97人妻精品一区二区免费 | 成年人看的毛片 | 超碰超碰| 中国美女囗交视频 | 欧美中文字幕在线视频 | 成片免费观看视频 | 黄色片地址 | www.久久伊人 | 亚洲成人乱码 | 蜜臀中文字幕 | 国产精品毛片久久久 | 秘密基地动漫在线观看免费 | 亚洲大片| 黄色va| 精品黑人一区二区三区在线观看 | 超碰黑丝| 日韩中文字幕观看 | 日韩精品免费一区二区夜夜嗨 | 色吊丝中文字幕 | 人人妻人人澡人人爽人人欧美一区 | 欧美日韩国产精品综合 | 久久精品成人一区二区三区蜜臀 | 精品一级少妇久久久久久久 | 真实新婚偷拍xxxxx | 国产偷人视频 | 欧美二区三区 | 九九亚洲精品 | 无遮挡aaaaa大片免费看 | eeuss鲁片一区二区三区在线观看 | 国产视频在线免费观看 | 四虎网站在线观看 | 91av综合 | 精品人妻一区二区三区久久 | 中文无码一区二区三区在线观看 | 91精品国产综合久久久久久久 | 东北毛片|