收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 6078|回复: 10

js按位“或”在这里的作用

  [复制链接]
发表于 2012-3-31 15:53:26 | 显示全部楼层 |阅读模式
100体力
本帖最后由 kxm1984 于 2012-3-31 16:10 编辑

看到这个,不是很理解!
一根竖线“|”是  按位或   运算符吗?
那么他在这里
var a= document.documentElement.offsetWidth / 20 | 0;
的作用是什么啊??不会是取整吧????( 我测试了感觉是取整,但又不能确定 )
了解,请讲解下,谢谢!

最佳答案

查看完整内容

alert(Math.floor(1.9)) //普通写法 alert(1.9|0) //二货写法
发表于 2012-3-31 15:53:27 | 显示全部楼层
alert(Math.floor(1.9)) //普通写法

alert(1.9|0) //二货写法
回复

使用道具 举报

发表于 2012-3-31 16:07:51 | 显示全部楼层
应该是取整!请高手解答
回复

使用道具 举报

发表于 2012-3-31 16:08:58 | 显示全部楼层
就是取整,你可以测试下就什么都明白了
回复

使用道具 举报

发表于 2012-3-31 16:33:44 | 显示全部楼层
本帖最后由 obananao 于 2012-3-31 16:38 编辑

楼主 看这里:JavaScript 位运算符




按位或运算符(|)

当两个数相同位数字不同的时候返回1,否则返回0,例如1|2=3。
回复

使用道具 举报

发表于 2012-3-31 16:38:51 | 显示全部楼层
最新情报显示,尽管JavaScript的所有数字都是浮点型,但是位运算符却要求它的运算数是整形的,它们操作的这些整形运算数使用的是32位的整数表示法,而不是等价的浮点表示法。

优点,OR比Math.floor速度快。

缺点,不能通过JsLint验证,只能是32位的有符号的整型,超过2的31次方之后将会出错。因此,不能用于表示金额。
回复

使用道具 举报

发表于 2012-3-31 16:47:36 | 显示全部楼层
obananao 发表于 2012-3-31 16:33
楼主 看这里:JavaScript 位运算符

我想,楼主是知道这个的……
----
在windows脚本技术手册和MDN,位运算的部分都没看到有关小数部分的说明,不知道EMAC的文档里有没有这部分的说明

纯粹以语义来说,这么写是没有意义的,因为任何数值和0进行逻辑或都等于它自己
不过既然这么写(假设它是可用的),那合理的解释就是取整(结果也符合)

Math要失业了吗!!(Math:)

楼主多试几个浏览器看看结果,或者看看上下文的语句
回复

使用道具 举报

发表于 2012-3-31 16:51:53 | 显示全部楼层
这个很详细:http://hemin108.iteye.com/blog/960244
msdn :http://msdn.microsoft.com/zh-cn/library/7tafsdcy(v=vs.80).aspx


按位或运算符(|)
参加运算的两个对象,按二进制位进行“或”运算。
运算规则:0|0=0;   0|1=1;   1|0=1;    1|1=1;
      即 :参加运算的两个对象只要有一个为1,其值为1。
例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111   因此,3|5的值得7。 

另,负数按补码形式参加按位或运算。
“或运算”特殊作用:
(1)常用来对一个数据的某些位置1。
方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。
例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。
回复

使用道具 举报

发表于 2012-3-31 23:13:26 | 显示全部楼层
是取整的吧,8楼的答案差不多
回复

使用道具 举报

发表于 2012-4-1 10:19:25 | 显示全部楼层
本帖最后由 obananao 于 2012-4-1 10:20 编辑

楼主 你试试

 提示:您可以先修改部分代码再运行




当  X|0 的时候也就是说|后面为0的情况下可以当成Math.floor(x)

如果后边不为0是不能用Math.floor(x)来实现的


这个仅仅是个巧合而已

我上边已经说过原理了

希望你好好看看我楼上的原理
回复

使用道具 举报

 楼主| 发表于 2012-4-1 10:24:43 | 显示全部楼层
obananao 发表于 2012-4-1 10:19
楼主 你试试
[html]

非常感谢,这样的例子,我昨天已经实验过了,也百度GOOGLE了,但是不能完全肯定它是取整的作用。所以来问问各位达人,到现在看来还是取整的作用。只是我感觉这样的写法来取整,真的挺二的。(除非这样写比math的执行效率高,但是谁又care这一星半点的效率呢)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备12001430号 )  

GMT+8, 2020-8-11 12:07 , Processed in 0.109098 second(s), 8 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表