Java位运算符和等号字符;复合运算符

4

我有点困惑:

long v = 0;
v <<= 8; 
v |= 230;

我知道 << 是有符号左移运算符,| 是位包含或运算符,但我不明白等于号是做什么的?
所以首先v是0。那么 << 没有任何效果吗?然后它等于1000,但之后会发生什么呢?
编辑:我已经编辑了标题,这样其他人可能更好地找到这个问题:添加了“复合运算符”。

它有影响。v = v << 8 然后 v = v | 230 - Maroun
3个回答

5

它们是复合运算符,就像+=-=一样。它们执行操作,然后将结果赋回给v

基本上:

v <<= 8;

已生效

v = v << 8;

同样地,
v |= 230;

正在生效

v = v | 230;

你可以将 +=-= 进行比较:
v += 1;

可以有效地

v = v + 1;

5

有一种类似于+=的语法。

例如x+=3意味着将3加到x中; 存储到x中。

v <<= 8;

左移8位并将结果存储到v中,与v=v << 8的功能相同。

v |= 230;

执行位运算 OR 并将其存储回 v,相当于 v=v | 230

现在,由于性能限制和优化,此操作可能以低级别的原地方式完成。


@Thomas 没问题。请使用旁边的复选标记接受帮助您最多的答案。 - nanofarad
2
我必须等几分钟才能开始;但我会的 :) - Thomas
执行 v=v | 230 后,v 的值将是多少? - Suresh Atta
@sureshatta 试一下就知道了。这取决于原始的 v 值。 - nanofarad

0
基本上,这个:
v <<= 8; 
v |= 230;

等同于这个:

v = v << 8; 
v = v | 230;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接