正如标题所说,我对<<=
所代表的内容感到有些困惑。我知道<<
是一个移位运算符,但这是我第一次看到=
。有任何澄清吗?
示例代码:
#include <stdio.h>
main() {
unsigned int i, s;
for( s = i = 0; i <= 7; i++){
switch (i%3) {
case 0: i++;
case 1: i <<= (7 & (i + 1)) | ((i + 2) & 6); s += i; break;
case 2: i += (i ^ i) | 1 ; continue;
}
s++;
}
printf("%d\n", s);
}
答案 0 :(得分:8)
AFAIK >>=
是“相同”操作。
你可以打电话
i = i << 4;
或
i <<= 4;
它具有相同的效果。
就像i = i + 5;
和i += 5;
答案 1 :(得分:3)
此运算符称为按位左移分配运算符。
C语言和C系列中的语言(C ++,Java,Objective C,C#和其他语言)都有一些叫做复合赋值运算符的东西。他们有这种一般形式:a OP= b;
其中OP
是许多允许的运算符之一,例如
+
另外提供+=
-
减法给予-=
*
乘法给出*=
/
师给予/=
|
按位或给|=
&
按位并给予&=
仅举几例。
复合赋值运算符做了什么?
他们是速记。而不是
a = a OP b;
使用
a OP= b;
第二个好处。 a
仅评估一次。
这是一个先进的概念。有关详细信息,请参阅此StackOverflow answer Left side evaluated only once。
答案 2 :(得分:0)
&LT;&LT = 移位第一个操作数的值,留下第二个操作数的值指定的位数;将结果存储在第一个操作数指定的对象中。