Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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/2/python/305.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
`java(0%2!=0)=false`_Java_Boolean_Zero_Modulus - Fatal编程技术网

`java(0%2!=0)=false`

`java(0%2!=0)=false`,java,boolean,zero,modulus,Java,Boolean,Zero,Modulus,我一直被卡住的部分是 boolean(0%2!=0) ==错误。我的意思是如果2变成0,0次,那么余数就是2,2不等于0。所以这应该是真的。然而,当我在java程序中使用布尔值时,它将其视为false。有人知道为什么吗 我能想到的唯一合乎逻辑的答案是,整数可能会变成0和无限次,因此被认为是假的,有人吗?有两个步骤: 0%2计算结果为0 0!=0的计算结果为false 为了详细说明第一步,JLS向%操作员发送如下命令: 据说二进制%运算符从隐含除法中产生其操作数的剩余部分;左手操作数是被除数,

我一直被卡住的部分是
boolean(0%2!=0)
==错误。我的意思是如果2变成0,0次,那么余数就是2,2不等于0。所以这应该是真的。然而,当我在java程序中使用布尔值时,它将其视为false。有人知道为什么吗

我能想到的唯一合乎逻辑的答案是,整数可能会变成0和无限次,因此被认为是假的,有人吗?

有两个步骤:

  • 0%2
    计算结果为
    0

  • 0!=0
    的计算结果为
    false

为了详细说明第一步,JLS向
%
操作员发送如下命令:

据说二进制%运算符从隐含除法中产生其操作数的剩余部分;左手操作数是被除数,右手操作数是除数


0
除以
2
的余数是
0
,而不是你想象的
2

%
返回除法后的余数。零除以任何东西(除了它本身!)都是零,所以没有余数


因此
0%2
0
0%2=0,因为0/2=0和提醒0,或者0*2+提醒=0

你只是误解了

如果2变成0,0次,那么余数就是2


不是
2进入0
,而是
0进入2
,所以除法的结果是0,提示是0。

我想你把0%2和2%0弄混了(这是不可能的)。0%n始终等于0

好吧,让我们来分析一下

1)
0%2

模是有限除法的其余部分。例如,10%3是10/3的其余部分。10/3等于3+⅓. 所以剩下的是1

0%2是0/2的其余部分。0/2=0,没有休息,因此0%2=0

2)
0%2!=0

这意味着0%2与0不同。我们现在知道这是假的

3)
boolean(0%2!=0)

这只是简单的铸造。将结果强制转换为布尔值。它得到的不是一些错误的假设,而是Java值
false

4)
boolean(0%2!=0)=false


=
表示这里有一个测试。测试可以简化(如上所示)为
false==false
false
是否等于
false
?是的。结果是
true

它与运算符优先级有关,即Java解释器对运算符求值的顺序

有关文档,请参阅。一个有用的首字母缩略词是BUDMASRELCA-Brackets,Unary,Div-Mmultiplication(实际上是乘法,因为它包括模),Addition-Subtraction,Relational,Equality,LC条件(三元),A符号。 我遗漏了按位运算符,但它们可以分组在逻辑运算符下,并且优先于普通逻辑运算符

0%2=首先将0计算为0%2(乘法),然后使用!=0(平等)

在内部,编译器构建一个二元表达式树来表示如下所示的顺序,使用操作符作为根,叶子作为值或其他操作符(在递归情况下)。因此,在使用根操作符的叶子值计算根操作符之前,需要先计算具有操作符的子树

  !=
 / \
%   0
/\
0  2

我肯定这不是一个编码错误,我直接从我的书中复制了这个,它在我的讲座中也被多次引用。那是。。。不是
%
的意思。整数不是无限次地进入0,而是0次。我想在你的上一句话中,你可能会想到2/0(“0进入2无限次”)而不是0/2。我通常不知道+1是什么基本的东西,但出于某种奇怪的原因,这一点让我发笑。除零之外的任何东西都是零。现代数学是如此令人困惑:-)你是指“除”和“余数”。。。(提醒是你在便条上写的东西,devision不是一个英语单词……尽管它可能是一种中世纪酷刑的委婉说法。如“囚犯被带到地牢,用一把烧红的扑克‘设计’”。)