Javascript “怎么做?”;5.5“0==5”;工作
Javascript “怎么做?”;5.5“0==5”;工作,javascript,Javascript,5.5 | 0==5如何工作 在这种情况下,|0是按位的还是我认为是?如果是这样的话,为什么它会切断点之后的所有内容?该|执行的运算符是按位OR运算,隐式地将每个操作数转换为32位整数。因此,5.5 | 0==5被解析为5.5 |(0==5),其计算结果为5.5 | false 根据报告: … 5.让lnum为32(左心室)。 6.将rnum设为32(rval)。 7.返回将按位运算符@应用于lnum和rnum的结果。结果是一个有符号的32位整数 自从X | 0→ X对于任何整数,它实际上只是删
5.5 | 0==5
如何工作
在这种情况下,
|0
是按位的还是我认为是?如果是这样的话,为什么它会切断点之后的所有内容?该|
执行的运算符是按位OR运算,隐式地将每个操作数转换为32位整数。因此,5.5 | 0==5
被解析为5.5 |(0==5)
,其计算结果为5.5 | false
根据报告:
…
5.让lnum为32(左心室)。
6.将rnum设为32(rval)。
7.返回将按位运算符@应用于lnum和rnum的结果。结果是一个有符号的32位整数
自从X | 0
→ X
对于任何整数,它实际上只是删除数字的任何小数部分。按位运算符总是将操作数强制为32位整数
该操作被解释为
5.5 | (0 === 5)
那是
5.5 | false
这是被迫的
5.5 | 0
现在,5.5
被转换为32位整数,因此
5 | 0
这是5
关系运算符比按位运算符绑定得更紧密,这可能会造成混淆。如果要比较按位运算符(与加法或乘法不同)的结果,则必须显式插入括号。它不等于true,而不等于false
5.5 | 0 === 5
返回
5
运算符优先级(5.5 | 0)==5
返回true这只是因为0==5
为false,被强制为0
,然后5.5
为5
@YuriyGalanter表达式5.5 | 0==5
为我返回5
,而(5.5
为true。我想我们需要确认我们正在讨论的是哪个表达式。@ajp15243==
运算符的优先级高于|
,因此首先进行比较。@Pointy我明白这一点。我要指出的是OP的问题是关于没有()
的表达式,而Yuriy似乎试图用包含()
的表达式来说明问题,这显然是一个不同的表达式,不一定是被问到的。如果这里的()
表达式有什么意义,我看不出来。哈,多么巧合:)一般来说,也就是说,对于其他语言,“按位运算符总是将操作数强制为32位整数”是真的吗?很好,我以为OP是在谈论5.5 | 0
结果是产生5
,只是措辞不当。@user2820379有些语言会这样做,但许多语言不会。像C#这样的强类型语言甚至不在非整数类型上定义位运算符。e、 g.“foo”|“bar”
会导致编译器错误。@Cristy在本例中,我不确定它是否重复,因为实际上看起来像这样的代码可能不是真的试图简单地执行“floor”操作。当然,事实就是这样。