JavaScript 特有方法计算二进制中1的个数 split方法

代码如下:


代码如下:

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;
}

觉得这样写很麻烦,突然想到是不是可以利用js的split方法来实现计算1的个数,split的参数为正则\0*\,分离字符串中的1。代码如下:


代码如下:

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

这样代码就显得很简洁了。

只可惜测试了下两种方法的效率,发现利用正则的split方法效率比较低,时间大概是for循环方法的2.5倍。

function f(n){
return n.toString(2).split(/0*/).length;
}
function g(n){
var n = n.toString(2);
var count = 0;
var tmp = "";
for(var i=0;i");
var now = Date.now();
for(var j=0;j");

document.write("for方法计算结果:"+g(123456789987654321)+"
");
now = Date.now();
for(var k=0;k");

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

发现原来的代码中有两个错误。

一是在IE下,字符串不能使用数组下标访问指定位置的值,只能采用charAt(index)的方法。

二是在Chrome和Opera下,split(\0*\)的方式计算出的1的个数在有些情况下会多1。

比如:12的二进制值为1100,使用split(\0*\)的方式生成的数组为[1,1,]。也就是说,当二进制值不以1结尾时,在最后都会生成一个空数组项(在IE和Firefox中没有这个问题)。

思考后发现,其实并不需要使用正则的方式来计算1的个数,只要把1当做split方法的参数,把1作为分隔符,分出的数组的长度应该是1的个数加1。


代码如下:

function f(n){
return n.toString(2).split("1").length – 1;
}

这样就不用采用正则的方法,也兼容了各主流浏览器,而且它的效率完全不低于使用for遍历的方法。

function f(n){
return n.toString(2).split("1").length - 1;
}
function g(n){
var m = n.toString(2);
var count = 0;
for(var i=0;i
");

document.write("for方法计算结果:"+g(123456789987654321)+"
");
var now = new Date();
for(var k=0;k");

document.write("split方法计算结果:"+f(123456789987654321)+"
");
now = new Date();
for(var j=0;j");

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

(0)

相关推荐

  • JavaScript转换二进制编码为ASCII码的方法

    本文实例讲述了JavaScript转换二进制编码为ASCII码的方法.分享给大家供大家参考.具体如下: <html> <head> <script type="text/javascript"> var input_id = "bin_text"; var answer_id = "answer"; function convertToASCII() { var bin_text = document.getE

  • javascript 二进制运算技巧解析

    1.原码.反码.补码,正数减法转补码加法 js 在进行二进制运算时,使用 32 位二进制整数,由于 js 的整数都是有符号数,最高位0表示正数,1表示负数,因此,js 二进制运算中使用的整数表达范围是 复制代码 代码如下: -Math.pow(2,31) ~ Math.pow(2,31)-1 // -2147483648 ~ 2147483647 原码:最高位 0 表示正,1表示负,其余 31 位是该数的绝对值(真值的绝对值)的二进制形式 反码:正数反码与原码相同,负数反码是原码符号位不变,其余

  • javascript十六进制及二进制转化的方法

    本文实例讲述了javascript十六进制及二进制转化的方法.分享给大家供大家参考.具体实现方法如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"

  • JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法

    javascript做带小数的计算时,会出现9的循环,以下方法帮助解决. 第一个参数是需要处理的数值,第二个参数是需要保留的小数位数.自家项目里面就这么用了~ 复制代码 代码如下: function round(v,e){ var t=1; for(;e>0;t*=10,e--); for(;e<0;t/=10,e++); return Math.round(v*t)/t; }

  • JavaScript前端开发之实现二进制读写操作

    关于javascript前端开发之实现二进制读写操作的相关介绍,请看以下内容详解,本文介绍的非常详细,具有参考价值. 由于种种原因,在浏览器中无法像nodejs那样操作二进制. 最近写了一个在浏览器端操作读写二进制的帮助类 !function (entrance) { "use strict"; if ("object" === typeof exports && "undefined" !== typeof module) {

  • JavaScript 特有方法计算二进制中1的个数 split方法

    代码如下: 复制代码 代码如下: 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; } 觉得这样写很麻烦,突然想到是不是可以利用js的split方法来实现计算1的个数,split的参数为正则\0*\,分离字符串中的1.代码如下: 复制代码 代码如下: function f(n){ re

  • php实现统计二进制中1的个数算法示例

    本文实例讲述了php实现统计二进制中1的个数算法.分享给大家供大家参考,具体如下: 问题 输入一个十进制整数,输出该数二进制表示中1的个数.其中负数用补码表示. 解决思路 这是个位运算的题目. 解法一:可以通过按位与操作,通过将每一位和1与操作来求出1的个数. 解法二(最优解):一个巧妙的方法,一个不为0的二进制数,肯定至少有一位是1,当这个数减一的时候,它的最后一位1会变为0,后边的所有0会变为1.比如10100,减一之后会变为10011,然后用原数字10100和10011进行与操作之后,会得

  • 二进制中1的个数

    前言 最近会手写一些常考的面试题目,测试通过后会跟大家分享一下 移位法仅适应于正数的做法: 移位法就是每次判断n的二进制的最低位是否为1,时间复杂度为O(logn) 复制代码 代码如下: int nativeOnenum(int n)   {       int count = 0; while (n) {           if (n & 1)  count ++;           n >>= 1;       } return count;   } 对于正数没问题,但是如果n

  • JavaScript判断表单中多选框checkbox选中个数的方法

    本文实例讲述了JavaScript判断表单中多选框checkbox选中个数的方法.分享给大家供大家参考.具体如下: 这里使用JavaScript检测并判断出表单中多选框的选中个数,也就是checkbox被选择了多少,在以前,这个问题经常被各大论坛问到,因为检测checkbox不像检测输入框那么简单,尤其是判断个数也经常会遇到,所以说觉得这个Js代码还是很有用的,大家有兴趣的再完善一下. 运行效果如下图所示: 在线演示地址如下: http://demo.jb51.net/js/2015/js-ch

  • php计算数组不为空元素个数的方法

    复制代码 代码如下: <?php $arr = array( 1=>"11", 2=>"22", 3=>"33", 4=>"" ); print_r(count(array_filter($arr))); ?>

  • javascript学习笔记(二)数组和对象部分

    javascript对象部分 一:基础部分 1.JavaScript 中所有变量都是对象,除了两个例外 null 和 undefined. 2.Jscript 支持四种类型的对象:内部对象.生成的对象.宿主给出的对象(所有BOM和DOM对象都是宿主对象.)以及 ActiveX 对象(外部组件). 3.Microsoft Jscript 提供了 11 个内部(或"内置")对象.它们是Array.Boolean.Date.Function.Global.Math.Number.Object

  • JavaScript计算两个日期时间段内日期的方法

    本文实例讲述了JavaScript计算两个日期时间段内日期的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: /*************************  * 计算两个日期时间段内所有日期  *   * @param value1  *            开始日期 YYYY-MM-DD  * @param value2  *            结束日期  * return 日期数组  */  function dataScope(value1, value2

  • Javascript计算二维数组重复值示例代码

    前言 最近工作中遇到了一个问题,需求是利用Javascript计算二维数组重复值,如下面有个二维数组 [[\'error\',3],[\'error\',5],[\'error\',6],[\'true\',3],[\'true\',1]] 需要统计计算重复项 \'error\' 和 \'true\', 统计计算之后的结果: [[\'error\',14],[\'true\',4]] 实现代码: var arr = [[\'error\',3],[\'error\',5],[\'error\',

  • JavaScript计算某一天是星期几的方法

    本文实例讲述了JavaScript计算某一天是星期几的方法.分享给大家供大家参考.具体如下: JavaScript计算某一天是星期几,文本框中是默认值 ,只要按此种格式输入日期时间,就可以推算出当天是星期几,一个简单的JS时间计算实例,运行本效果后,只需点击"计算"按钮即可显示效果,这样我们就能很快的知道某一天是星期几了. 运行效果图如下: <html> <head> <title>计算某一天是星期几</title> <style

  • JavaScript实现16进制颜色值转RGB的方法

    本文实例讲述了JavaScript实现16进制颜色值转RGB的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/19

随机推荐