Java |运算符
在我的Java编程初学者课程中,我有这个问题,我在书中找不到单个“|”作为运算符的含义 问题是:Java |运算符,java,operators,Java,Operators,在我的Java编程初学者课程中,我有这个问题,我在书中找不到单个“|”作为运算符的含义 问题是: int j = 0; if ((8 > 4) | (j++ == 7)) System.out.println("j = " + j); j=1吗 解释原因 本书用示例解释了OR运算符“| |”,但没有显示单个“|”。运算符的含义是否在两个操作数之间发生变化?|->这是按位操作,或者运算符执行按位包含或运算,并同时执行两个操作数(右操作数和左操作数) 如果一个或两个 其操作数
int j = 0;
if ((8 > 4) | (j++ == 7))
System.out.println("j = " + j);
j=1吗
解释原因
本书用示例解释了OR运算符“| |”,但没有显示单个“|”。运算符的含义是否在两个操作数之间发生变化?
|
->这是按位操作,或者运算符执行按位包含或运算,并同时执行两个操作数(右操作数和左操作数)
如果一个或两个
其操作数中的位为1。但是,如果两个位都为0,则
此运算符生成0。更精确地说,“|”运算符返回1
在所有情况下,除非两个操作数的位均为0
此处
8>4
将返回true
,j++==7
将返回false
。因此,如果(true | false)则为,此时逐位运算符将返回true
或1,并打印j的值,该值在j++之后变为1。
->这是逐位or运算符执行逐位包含或运算,并执行两个操作数(右和左)
如果一个或两个
其操作数中的位为1。但是,如果两个位都为0,则
此运算符生成0。更精确地说,“|”运算符返回1
在所有情况下,除非两个操作数的位均为0
此处8>4
将返回true
,j++==7
将返回false
。因此,如果(true | false)
则为,此时位运算符将返回true
或1,并打印j的值,该值在j++之后变为1。如果使用|
和&
形式,而不是这些运算符的
和形式,Java不会费心单独计算右操作数
Boolean b = true;
if(b || foo.test())
{
//we entered without calling test()
}
if(b | foo.test())
{
//we entered calling test()
}
如果您使用|
和&
形式,而不是这些运算符的
和&
形式,Java将不会费心单独计算右侧操作数
Boolean b = true;
if(b || foo.test())
{
//we entered without calling test()
}
if(b | foo.test())
{
//we entered calling test()
}
答案是否定的,因为j被初始化为0,但此后从未分配。因此j的值始终保持在0。答案是否定的,因为j初始化为0,但此后从未赋值。因此j的值在整个时间内都保持在0。是的,含义会改变,|
是逻辑或
运算符,而|
是按位或
运算符
由于此运算符在位级别操作(…),因此它不会以与|
相同的方式短路,这意味着,即使第一个操作数为真
,也会计算第二个操作数。是的,含义会发生变化,|
是逻辑或
运算符,而|
是按位或
由于此运算符在位级别上操作(…),因此它不会以与|
相同的方式短路,这意味着,即使第一个操作数为true
,也会对第二个操作数求值。该|
运算符为按位或,但您可能会问,为什么有人会使用按位或布尔变量
逻辑OR运算符(|
)有一个称为短路的功能,这意味着如果左操作数的计算结果为true
,则不会进行进一步的处理,甚至右操作数也不会计算。但按位OR运算符总是计算两个操作数,如果应用于布尔操作数,则计算两个操作数,然后对结果应用简单OR
在您的情况下,始终计算(j++==7)
,而不管8>4的结果如何。这不会发生在|
运算符上。因此,j
将递增1,程序的输出是1
|
运算符是按位或,但您可能会问,为什么有人会对布尔变量使用按位或
逻辑OR运算符(|
)有一个称为短路的功能,这意味着如果左操作数的计算结果为true
,则不会进行进一步的处理,甚至右操作数也不会计算。但按位OR运算符总是计算两个操作数,如果应用于布尔操作数,则计算两个操作数,然后对结果应用简单OR
在您的情况下,始终计算(j++==7)
,而不管8>4的结果如何。这不会发生在|
运算符上。所以,<代码> j/Cube >将增加1,程序的输出是“代码> 1”/Cord>。< /P>这是位或运算符@ JojEujVIZA,为什么你发布了一个C++站点的链接?看得更硬,或者得到一本更好的书。它是位或操作符@ JojeZuVuz,为什么你发布了一个C++站点的链接?看起来更难,或者得到一本更好的书。它也是(非速记)或
条件运算符。它也是(非速记)或
条件运算符。但在运算符的右侧,j++不是在初始化的数字上加1吗?(j++==7)计算j++=7,但它不增加j。要增加j,您应该看到j=j++;(==意味着评估,而=意味着分配)在一个小型java应用程序中尝试它(在主函数的右边)。你会发现j从来没有递增过。西蒙,你的说法是错误的。j++是j的就地递增,意思是,它相当于j=j+1或j++=1。在++j和j++之间有区别,但这不是重点,因为它在这种情况下没有影响。但是在操作符的右侧,j++不是在initi中添加了1吗如果j++=7,则计算j++=7,但它不会增加j。要增加j,您应该看到j=j++;(==表示求值,而=表示赋值)在一个小型java应用程序中尝试(在主函数的右侧)。Yo