最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

JavaScript趣题:统计二进制

来源:动视网 责编:小采 时间:2020-11-27 20:25:15
文档

JavaScript趣题:统计二进制

JavaScript趣题:统计二进制:咋们搞前端的,想必很少有机会接触二进制吧,那些位运算啥的,不是底层应该考虑的问题嘛?昨天看到一个题目,它和二进制相关,但用不用位运算都没关系,借助JS的语言特性,也能轻易地解决。描述如下:写一个函数,接收一个十进制的正整数作参数,用二进制表示
推荐度:
导读JavaScript趣题:统计二进制:咋们搞前端的,想必很少有机会接触二进制吧,那些位运算啥的,不是底层应该考虑的问题嘛?昨天看到一个题目,它和二进制相关,但用不用位运算都没关系,借助JS的语言特性,也能轻易地解决。描述如下:写一个函数,接收一个十进制的正整数作参数,用二进制表示


咋们搞前端的,想必很少有机会接触二进制吧,那些位运算啥的,不是底层应该考虑的问题嘛?

昨天看到一个题目,它和二进制相关,但用不用位运算都没关系,借助JS的语言特性,也能轻易地解决。

描述如下:

写一个函数,接收一个十进制的正整数作参数,用二进制表示它,并返回那些数位等于1的数目。

来个例子:

1234表示为二进制是10011010010,这里面有5个1,所以返回5。

看了这个描述,我的脑海中首先想到的是,以前老师上课教的,怎么从十进制转二进制(书到用时方恨少^_^)。

好在我记性不错,很快想到了,对这个正整数先对2取余,再除以2,结果再对2取余,再除以2......直到结果为0。

那么,在上面的过程里面用一个变量记录余数为1的次数,最后返回即可。

于是便有了下面的做法:

var countBits = function(n) {
 var count = 0;
 while(n > 0){
 var res = n % 2;
 if(res == 1){
 count++;
 }
 n = parseInt(n / 2);
 }
 return count;
};

这代码和思路都算中规中矩,但没有充分利用JS的语言特性。

在JS里面,十进制转二进制不是有现成的API麽?

number.toString(2),这样不就得到了二进制的字符串了么?

结果都出来了,那就一个个地查找为1的数目,再返回。

嗯嗯,上面的两种方法都不错,但殊途同归,最高效的方法还是位运算。

最后,来看一个国外大牛写的位运算解法吧!

function countBits(n) {
 for(c=0;n;n>>=1)c+=n&1
 return c;
}

啧啧,亮瞎双眼的节奏。

文档

JavaScript趣题:统计二进制

JavaScript趣题:统计二进制:咋们搞前端的,想必很少有机会接触二进制吧,那些位运算啥的,不是底层应该考虑的问题嘛?昨天看到一个题目,它和二进制相关,但用不用位运算都没关系,借助JS的语言特性,也能轻易地解决。描述如下:写一个函数,接收一个十进制的正整数作参数,用二进制表示
推荐度:
标签: js 统计 javascript
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top