javascript的|符号是什么作用

var trailingZeroes = function(n) {
  var count=0
  while(n>=5){
    count+=n/5|0 // 这里!!
    n/=5
  }
  return count
};

请问 count+=n/5|0 里的|符号起了什么作用?

阅读 2.1k
3 个回答

单个的 |^&表示位运算。
但是严格来说,在 JS 里只有整数才能进行位运算,因此 JS 在遇到非整数变量需要进行位运算的时候,会先对这些变量进行隐式类型转换,变成整数再进行计算。
然后许多人就利用JS这个特点,通过位运算把字符串、浮点数(即带小数的数字)转为整数,可以精简代码,下面的两种写法计算出来的结果是一样的,但是后一种写法要短小一些:

// 正经的写法
count += Math.floor(n/5);  // count < 2**31
// 位运算的写法
count += n/5 | 0;


// 默认是截掉小数部分,也就是对底取整,补充一个四舍五入的实现
// 需要注意的是这种方法的结果不等同于 Math.round
// 把这里的 0.5 换成 1 就成了对顶取整了
(x + 0.5) | 0;

不过,这样的写法容易使没有经验的开发者感到疑惑,因此不建议在多人协作或需要后续维护的项目中使用,不然就应该在使用的时候注释其作用(那还不如正经地调用变换方法)。
另外需要注意的是,位运算的参数是 32位有符号整数,这意味着这种取整方法的数值必须小于 2**31

这个是位运算符,|是或的意思,a | b 只要有任何一个值是1(真),结果就是1,否则为0(假)。
类似的还有&,这个是与的意思,a & b 只要有任何一个值是0(假),结果就是0,否则为1

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题