2013-04-20 81 views
1

下面是我的代码,为什么y的值会改变?
var y = x | 5;是什么意思?

代码为什么y的值会根据x而改变?

var x = 0; 
     for(x; x < 11 ; x++) 
    { 
    var y = x | 5; 
    console.log("\nx: "+x+ " y : "+y) 
    } 

结果是

x: 0 y : 5 
    x: 1 y : 5 
    x: 2 y : 7 
    x: 3 y : 7 
    x: 4 y : 5 
    x: 5 y : 5 
    x: 6 y : 7 
    x: 7 y : 7 
    x: 8 y : 13 
    x: 9 y : 13 
    x: 10 y : 15 

为什么y变化基于x值。
关于什么基础y是计算?

+2

这真的是一个问题吗?如果是的话,我感到震惊。 – 2013-04-20 11:19:33

+0

管道操作员已经被讨论过: http://stackoverflow.com/questions/6194950/what-does-the-single-pipe-do-in-javascript – 2013-04-20 11:19:52

+0

+1为好问题 – PSR 2013-04-20 11:25:37

回答

4

|是一个按位或运算符!它的工作原理是将操作数转换为二进制,并对每一位执行OR操作!

5进制是:101。 现在,尝试做转换等操作,应用操作,您将看到如何y取决于x

例如:

9 = 1001 
5 = 0101 
     ____ 
9|5 = 1101 == 13 

另外请注意,您的for循环包含语法错误。删除最后的;在线,你很好去。

for(; x < 11 ; x++) 

而且,你不需要x在第一部分中,因为它已经宣布和初始化

+0

谢谢你的明确解释 – VenomVendor 2013-04-20 11:24:44

+0

很高兴如果有帮助。你也许想看看AND,OR,XOR真值表。 :) – SuperSaiyan 2013-04-20 11:27:02

+0

最后一个';'是放在这里的错字错误。 – VenomVendor 2013-04-20 11:32:55

2

|是一个按位或运算符。它正在执行或操作

这是一个按位或。 由于按位操作只对整数有意义,所以0.5被截断。

0 | x is x, for any x. 

    0 1 1 0 = 6 
    1 0 1 0 = 10 
    1 1 1 0 = 14 

9 | 5 = 1101 (which is 13) 

SEE HERE

+1

@VenomVendor你现在有没有得到答案 – PSR 2013-04-20 11:21:54

相关问题