Java中的布尔值
我是一个初学者,开始学习java语言。我在书中遇到了一个关于布尔人的问题。我不知道如何找到问题的价值,我想知道是否有人能给我一个代码应该是什么样子的示例。非常感谢您的帮助 书中的问题: 假设b的值为false,x的值为0。以下每个表达式的值是多少 a b&&x==0 b | | x==0 c!b&&x==0 d!b | | x==0 e b&x!=0 f b | | x!=0 g!b&x!=0 啊!b | | x!=0 我只是不知道该如何解决这个问题,救命! 如果你看Java,那就谢谢你了and==比&&和| |逻辑and和OR具有更高的优先级。所以Java中的布尔值,java,boolean,Java,Boolean,我是一个初学者,开始学习java语言。我在书中遇到了一个关于布尔人的问题。我不知道如何找到问题的价值,我想知道是否有人能给我一个代码应该是什么样子的示例。非常感谢您的帮助 书中的问题: 假设b的值为false,x的值为0。以下每个表达式的值是多少 a b&&x==0 b | | x==0 c!b&&x==0 d!b | | x==0 e b&x!=0 f b | | x!=0 g!b&x!=0 啊!b | | x!=0 我只是不知道该如何解决这个问题,救命! 如果你看Java,那就谢谢你了and
b && x == 0
只是
b && (x == 0) // --> here x==0 gets evaluated first due to precedence
那是
b && true // (cause x is 0)
既然b是false,那么在Java中,最终结果是false,!=and==比&&和| |逻辑and和OR具有更高的优先级。所以
b && x == 0
只是
b && (x == 0) // --> here x==0 gets evaluated first due to precedence
那是
b && true // (cause x is 0)
由于b为假,最终结果为假 回想一下,&&和| |两边都需要布尔值 回想一下!反转布尔值 回想一下二进制操作!=and==将整数对转换为布尔值 从右边开始;决定它是真是假 将上一行的结果放入表达式中 使用对应逻辑运算符的真值表计算结果。 让我们以您的前两个练习为例: b&&x==0 你知道b是假的,所以和的结果马上就被知道了:它是假的-没有必要做任何其他事情 b | | x==0 你知道b是假的,所以OR的结果现在还不知道。 计算x==0该值为真 计算b | | true该值为true,因为使用true或ing始终为true。
以下是您处理此问题的方法: 回想一下,&&和| |两边都需要布尔值 回想一下!反转布尔值 回想一下二进制操作!=and==将整数对转换为布尔值 从右边开始;决定它是真是假 将上一行的结果放入表达式中 使用对应逻辑运算符的真值表计算结果。 让我们以您的前两个练习为例: b&&x==0 你知道b是假的,所以和的结果马上就被知道了:它是假的-没有必要做任何其他事情 b | | x==0 你知道b是假的,所以OR的结果现在还不知道。 计算x==0该值为真 计算b | | true该值为true,因为使用true或ing始终为true。
这本书应该解释每个操作的作用。您可以通过以下方式测试结果:
boolean b = false;
int x = 0;
System.out.println(b && (x == 0));
输出应给出正确或错误的答案。这本书应解释每个操作的作用。您可以通过以下方式测试结果:
boolean b = false;
int x = 0;
System.out.println(b && (x == 0));
输出应给出正确或错误的答案。当b是左侧的表达式时:带&&的任何内容都将返回false,因为b为false
当左侧包含b时,仅当右侧的表达式返回true时,every | |才会返回true,否则将返回false
让我们看一下您发布的几个示例:
a b&&x==0=>将计算为false,因为b为false,我们使用&&and
b | | x==0=>将计算为true,因为x==0为true,我们使用| |或
如果左侧包含!b则只有当右侧的计算结果为true时,任何具有&&的表达式才会计算为true。如果表达式有| |它会
无论右侧的表达式如何,计算结果均为true
c!b&&x==0=>将计算为true:因为双方都计算为true
d!b | | x==0=>将计算为true:因为双方的计算结果都为true
g!b&x!=0=>将计算为false,因为&&要求两边都为true,但右侧计算为false
啊!b | | x!=0=>将计算为true,因为左侧的计算结果为true,当b是左侧的表达式时,我们使用OR |:任何带&&的内容都将返回false,因为b为false
当左侧包含b时,仅当右侧的表达式返回true时,every | |才会返回true,否则将返回false
让我们看一下您发布的几个示例:
a b&&x==0=>将计算为false,因为b为false,我们使用&&and
b | | x==0=>将计算为true,因为x==0为true,我们使用| |或
如果左侧包含!b则只有当右侧的计算结果为true时,任何具有&&的表达式才会计算为true。如果表达式有| |它会
无论右侧的表达式如何,计算结果均为true
c!b&&x==0=>将计算为true:因为双方都计算为true
d!b | | x==0=>将计算为true:因为双方都计算为tru
e
g!b&x!=0=>将计算为false,因为&&要求两边都为true,但右侧计算为false
啊!b | | x!=0=>将计算为true,因为左侧的计算结果为true,我们使用OR | |因为您试图学习Java,启动eclipse并执行以下操作:
public static void main (String args[]) {
boolean b = false;
int x = 0;
if(b || x == 0) System.out.println(true);
else System.out.println(false);
}
那么您至少对第一个问题有了答案。既然您正在尝试学习Java,启动eclipse并执行以下操作:
public static void main (String args[]) {
boolean b = false;
int x = 0;
if(b || x == 0) System.out.println(true);
else System.out.println(false);
}
然后您至少可以得到第一个表达式的答案。查找表达式值的简单方法是将表达式打印到屏幕上,在您的情况下:
boolean b = false;
int x = 0;
System.out.println(b && x == 0); // false
System.out.println(b || x == 0); // true
System.out.println(!b && x == 0); // true
System.out.println(!b || x == 0); // true
System.out.println(b && x != 0); // false
System.out.println(b || x != 0); // false
System.out.println(!b && x != 0); // false
System.out.println(!b || x != 0); // true
您必须将其放入Java类中并运行,例如:
public class HelloBoolean {
public static void main (String args[]) {
// code comes here ...
}
}
查找表达式值的一种简单方法是将表达式打印到屏幕上(在您的情况下):
boolean b = false;
int x = 0;
System.out.println(b && x == 0); // false
System.out.println(b || x == 0); // true
System.out.println(!b && x == 0); // true
System.out.println(!b || x == 0); // true
System.out.println(b && x != 0); // false
System.out.println(b || x != 0); // false
System.out.println(!b && x != 0); // false
System.out.println(!b || x != 0); // true
您必须将其放入Java类中并运行,例如:
public class HelloBoolean {
public static void main (String args[]) {
// code comes here ...
}
}
首先,与许多其他语言不同,0在java中不是错误的。它是纯整数 假设您熟悉主要功能。 请记住使用与其公共类相同的名称保存文件 在本例中,BooleansDemo.java 在此之前的答案中对优先规则进行了详细描述
首先,与许多其他语言不同,0在java中不是错误的。它是纯整数 假设您熟悉主要功能。 请记住使用与其公共类相同的名称保存文件 在本例中,BooleansDemo.java 在此之前的答案中对优先规则进行了详细描述 条件算子 &&和| |运算符对两个布尔表达式执行条件and和条件OR运算。 这些运算符表现出短路行为,这意味着只对第二个操作数求值 如果需要的话 &&有条件和 ||有条件的或 从 a b&&x==0 &&是有条件的,这意味着只有当左操作数为真时才计算右操作数。 在您的例子中,b为false,这意味着求值结束,因为无论什么情况,false&&都不可能为true。 b | | x==0 ||是条件或,这意味着只有在第一个操作数为false时才计算右操作数。 在您的例子中,b为false,因此我们需要计算x==0才能得到结果 条件算子 &&和| |运算符对两个布尔表达式执行条件and和条件OR运算。 这些运算符表现出短路行为,这意味着只对第二个操作数求值 如果需要的话 &&有条件和 ||有条件的或 从 a b&&x==0 &&是有条件的,这意味着只有当左操作数为真时才计算右操作数。 在您的例子中,b为false,这意味着求值结束,因为无论什么情况,false&&都不可能为true。 b | | x==0 ||是条件或,这意味着只有在第一个操作数为false时才计算右操作数。
在您的例子中,b为false,因此我们需要计算x==0才能得到结果 首先,您需要了解涉及的操作员。 我们要处理五个接线员 &&:如果其两个操作数均为true,则结果为true。 这可以通过下面的真值表得出
| A | B | A && B |
+-------+-------+--------+
| true | true | true |
+-------+-------+--------+
| true | false | false |
+-------+-------+--------+
| false | true | false |
+-------+-------+--------+
| false | false | false |
| A | B | A || B |
+-------+-------+--------+
| true | true | true |
+-------+-------+--------+
| true | false | true |
+-------+-------+--------+
| false | true | true |
+-------+-------+--------+
| false | false | false |
| A | !A |
+-------+-------+
| true | false |
+-------+-------+
| false | true |
||:每当一个或多个操作数为true时,生成true结果。
这可以通过下面的真值表得出
| A | B | A && B |
+-------+-------+--------+
| true | true | true |
+-------+-------+--------+
| true | false | false |
+-------+-------+--------+
| false | true | false |
+-------+-------+--------+
| false | false | false |
| A | B | A || B |
+-------+-------+--------+
| true | true | true |
+-------+-------+--------+
| true | false | true |
+-------+-------+--------+
| false | true | true |
+-------+-------+--------+
| false | false | false |
| A | !A |
+-------+-------+
| true | false |
+-------+-------+
| false | true |
!:当其操作数为false时生成值true,当其操作数为true时生成值false。
这可以通过下面的真值表得出
| A | B | A && B |
+-------+-------+--------+
| true | true | true |
+-------+-------+--------+
| true | false | false |
+-------+-------+--------+
| false | true | false |
+-------+-------+--------+
| false | false | false |
| A | B | A || B |
+-------+-------+--------+
| true | true | true |
+-------+-------+--------+
| true | false | true |
+-------+-------+--------+
| false | true | true |
+-------+-------+--------+
| false | false | false |
| A | !A |
+-------+-------+
| true | false |
+-------+-------+
| false | true |
==等于:就本问题而言,它比较两个数字,如果两个数字相同,则返回true
!=不等于:这是一个缩写!A==B,即,如果数字不相同,则返回true
请注意,&&和| |都受益于也称为快捷方式的评估。这意味着只有在必要时才会对第二个操作数(右侧操作数)求值
合取&要求两个操作数都为true。它首先计算第一个操作数。如果第一个操作数的计算结果为false,则整个连词都为false,并且计算第二个操作数没有意义
析取| |要求一个操作数为真。它首先计算第一个操作数。如果第一个操作数的计算结果为true,则整个析取为true,并且计算第二个操作数没有意义
还请注意,其余三个操作数的优先级高于&&和| |。例如,b&&x==0与b&&x==0完全相同。然而,评价的顺序仍然存在
总结:
a) b && x == 0 // false: b is false, short-circuit applies
b) b || x == 0 // true: b is false, x == 0 is evaluated to true
c) !b && x == 0 // true: !b is true, and x == 0 is also true
d) !b || x == 0 // true: !b is true, short-circuit applies
e) b && x != 0 // false: b is false, short-circuit applies
f) b || x != 0 // false: b is false, x != 0 is also false
g) !b && x != 0 // false: !b is true, however x != 0 is false
h) !b || x != 0 // true: !b is true, short-circuit applies
首先,您需要了解涉及的操作员。 我们要处理五个接线员 &&:如果其两个操作数均为true,则结果为true。 这可以通过下面的真值表得出
| A | B | A && B |
+-------+-------+--------+
| true | true | true |
+-------+-------+--------+
| true | false | false |
+-------+-------+--------+
| false | true | false |
+-------+-------+--------+
| false | false | false |
| A | B | A || B |
+-------+-------+--------+
| true | true | true |
+-------+-------+--------+
| true | false | true |
+-------+-------+--------+
| false | true | true |
+-------+-------+--------+
| false | false | false |
| A | !A |
+-------+-------+
| true | false |
+-------+-------+
| false | true |
||:每当一个或多个操作数为true时,生成true结果
.
这可以通过下面的真值表得出
| A | B | A && B |
+-------+-------+--------+
| true | true | true |
+-------+-------+--------+
| true | false | false |
+-------+-------+--------+
| false | true | false |
+-------+-------+--------+
| false | false | false |
| A | B | A || B |
+-------+-------+--------+
| true | true | true |
+-------+-------+--------+
| true | false | true |
+-------+-------+--------+
| false | true | true |
+-------+-------+--------+
| false | false | false |
| A | !A |
+-------+-------+
| true | false |
+-------+-------+
| false | true |
!:当其操作数为false时生成值true,当其操作数为true时生成值false。
这可以通过下面的真值表得出
| A | B | A && B |
+-------+-------+--------+
| true | true | true |
+-------+-------+--------+
| true | false | false |
+-------+-------+--------+
| false | true | false |
+-------+-------+--------+
| false | false | false |
| A | B | A || B |
+-------+-------+--------+
| true | true | true |
+-------+-------+--------+
| true | false | true |
+-------+-------+--------+
| false | true | true |
+-------+-------+--------+
| false | false | false |
| A | !A |
+-------+-------+
| true | false |
+-------+-------+
| false | true |
==等于:就本问题而言,它比较两个数字,如果两个数字相同,则返回true
!=不等于:这是一个缩写!A==B,即,如果数字不相同,则返回true
请注意,&&和| |都受益于也称为快捷方式的评估。这意味着只有在必要时才会对第二个操作数(右侧操作数)求值
合取&要求两个操作数都为true。它首先计算第一个操作数。如果第一个操作数的计算结果为false,则整个连词都为false,并且计算第二个操作数没有意义
析取| |要求一个操作数为真。它首先计算第一个操作数。如果第一个操作数的计算结果为true,则整个析取为true,并且计算第二个操作数没有意义
还请注意,其余三个操作数的优先级高于&&和| |。例如,b&&x==0与b&&x==0完全相同。然而,评价的顺序仍然存在
总结:
a) b && x == 0 // false: b is false, short-circuit applies
b) b || x == 0 // true: b is false, x == 0 is evaluated to true
c) !b && x == 0 // true: !b is true, and x == 0 is also true
d) !b || x == 0 // true: !b is true, short-circuit applies
e) b && x != 0 // false: b is false, short-circuit applies
f) b || x != 0 // false: b is false, x != 0 is also false
g) !b && x != 0 // false: !b is true, however x != 0 is false
h) !b || x != 0 // true: !b is true, short-circuit applies
理解逻辑运算符的含义。查找,&&是共轭,| |是析取。@LuiggiMendoza它不是布尔/整数比较。右侧操作是逻辑int/int求值,返回的布尔值x==0可以是true,也可以是truefalse@CristianMeneses我的错。然后,请拿一支铅笔和一张纸做练习,否则你就学不到了。需要了解的重要事项是:1在Java中布尔不是数字类型,不能用在int表达式中。2&&和| |是短路运算符,因此如果可以通过计算左侧来确定结果,右侧甚至未进行评估,事实上,不得进行评估。3运算符优先级-联机查找表并将其添加到书签中。了解逻辑运算符的含义。查找,&&是共轭,| |是析取。@LuiggiMendoza它不是布尔/整数比较。右侧操作是逻辑int/int求值,返回的布尔值x==0可以是true,也可以是truefalse@CristianMeneses我的错。然后,请拿一支铅笔和一张纸做练习,否则你就学不到了。需要了解的重要事项是:1在Java中布尔不是数字类型,不能用在int表达式中。2&&和| |是短路运算符,因此如果可以通过计算左侧来确定结果,右侧甚至未进行评估,事实上,不得进行评估。3运算符优先级-联机查找表并将其标记为书签。否。b为false,因此在&&的右侧没有对x==0的求值。false&&x==0永远不可能是真的,所以短路评估已经完成,这意味着没有评估x==0。我已经删除了旁注,我认为@MichaelKonietzka是正确的,这是因为短路,但你仍然说x==0首先得到评估。那不是真的。那么,区分优先顺序和求值顺序?否。b是假的,因此在&&的右侧没有x==0的求值。false&&x==0永远不可能是真的,所以短路评估已经完成,这意味着没有评估x==0。我已经删除了旁注,我认为@MichaelKonietzka是正确的,这是因为短路,但你仍然说x==0首先得到评估。那不是真的。那么,区分优先顺序和求值顺序?计算顺序是错误的:在运行时,首先求值左侧操作数表达式。如果结果值为true,则条件或表达式的值为true,并且不计算右侧操作数表达式。如果左侧操作数的值为false,则计算右侧表达式;这意味着:1。计算b2。b为false,因此计算x==0。3.将HORE表达式求值为true。@MichaelKonietzka I没有提到计算顺序:OP不需要像编译器那样获得所讨论的逻辑表达式的结果。我这样做是有意的,以避免混淆纯逻辑及其实现。当然,他需要做编译器所做的事情,因为这些是Java表达式,而不仅仅是布尔代数。@MichaelKonietzka我不同意:考虑到赋值缺乏上下文和所涉及表达式的简单性,似乎创建作业的人想先教OP一些布尔代数,然后再进行评估。Java语法用于这些表达式的事实对于理解它们的含义来说是次要的。我不同意:左操作数优先和短路是&&和| |的关键特性。要教布尔代数,只需使用&和|。关于b | | x==0,最初x==0的计算是错误的。计算顺序是错误的:在运行时,左边的运算
首先计算rand表达式。如果结果值为true,则条件或表达式的值为true,并且不计算右侧操作数表达式。如果左侧操作数的值为false,则计算右侧表达式;这意味着:1。计算b2。b为false,因此计算x==0。3.将HORE表达式求值为true。@MichaelKonietzka I没有提到计算顺序:OP不需要像编译器那样获得所讨论的逻辑表达式的结果。我这样做是有意的,以避免混淆纯逻辑及其实现。当然,他需要做编译器所做的事情,因为这些是Java表达式,而不仅仅是布尔代数。@MichaelKonietzka我不同意:考虑到赋值缺乏上下文和所涉及表达式的简单性,似乎创建作业的人想先教OP一些布尔代数,然后再进行评估。Java语法用于这些表达式的事实对于理解它们的含义来说是次要的。我不同意:左操作数优先和短路是&&和| |的关键特性。要教布尔代数,只需使用&和|。关于b | x==0,最初x==0的计算是错误的。