国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

JavaScript 特有方法計(jì)算二進(jìn)制中1的個(gè)數(shù) split方法

2019-11-21 00:31:38
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
代碼如下:
復(fù)制代碼 代碼如下:

function g(n){
var n = n.toString(2);
var count = 0;
for(var i=0;i<n.length;i++)
{
if(n[i] == "1")
count++;
}
return count;
}

覺(jué)得這樣寫(xiě)很麻煩,突然想到是不是可以利用js的split方法來(lái)實(shí)現(xiàn)計(jì)算1的個(gè)數(shù),split的參數(shù)為正則/0*/,分離字符串中的1。代碼如下:
復(fù)制代碼 代碼如下:

function f(n){
return n.toString(2).split(/0*/).length;
}

這樣代碼就顯得很簡(jiǎn)潔了。

只可惜測(cè)試了下兩種方法的效率,發(fā)現(xiàn)利用正則的split方法效率比較低,時(shí)間大概是for循環(huán)方法的2.5倍。

[Ctrl+A 全選 注:如需引入外部Js需刷新才能執(zhí)行]

發(fā)現(xiàn)原來(lái)的代碼中有兩個(gè)錯(cuò)誤。

一是在IE下,字符串不能使用數(shù)組下標(biāo)訪(fǎng)問(wèn)指定位置的值,只能采用charAt(index)的方法。

二是在Chrome和Opera下,split(/0*/)的方式計(jì)算出的1的個(gè)數(shù)在有些情況下會(huì)多1。

比如:12的二進(jìn)制值為1100,使用split(/0*/)的方式生成的數(shù)組為[1,1,]。也就是說(shuō),當(dāng)二進(jìn)制值不以1結(jié)尾時(shí),在最后都會(huì)生成一個(gè)空數(shù)組項(xiàng)(在IE和Firefox中沒(méi)有這個(gè)問(wèn)題)。

思考后發(fā)現(xiàn),其實(shí)并不需要使用正則的方式來(lái)計(jì)算1的個(gè)數(shù),只要把1當(dāng)做split方法的參數(shù),把1作為分隔符,分出的數(shù)組的長(zhǎng)度應(yīng)該是1的個(gè)數(shù)加1。
復(fù)制代碼 代碼如下:

function f(n){
return n.toString(2).split("1").length 主站蜘蛛池模板: 安康市| 吴江市| 英山县| 乌拉特前旗| 兖州市| 株洲市| 吴忠市| 讷河市| 吉安市| 江达县| 佛坪县| 横峰县| 贺兰县| 久治县| 专栏| 柳河县| 鲁甸县| 确山县| 浙江省| 彝良县| 铁岭县| 靖边县| 彰化市| 兰西县| 左贡县| 新竹市| 宣武区| 响水县| 德安县| 蕲春县| 寿光市| 荆门市| 常熟市| 拉萨市| 庆城县| 枣阳市| 连平县| 凤翔县| 皮山县| 弥渡县| 枣阳市|