Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “怎么做?”;5.5“0==5”;工作_Javascript - Fatal编程技术网

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”操作。当然,事实就是这样。