在c ++中使用>> =或<< =复合赋值有什么用?

时间:2016-07-29 05:03:51

标签: c++

我是c ++的新手,并没有在任何地方的程序中看到这样的声明。请帮帮我

5 个答案:

答案 0 :(得分:2)

对于整数类型

i>> = 3;

等于:

i = i>> 3;

即按位移位变量i正确(在他的情况下)到位。

对于用户定义的类,可以将其重载为作者希望此运算符实现的任何功能

答案 1 :(得分:1)

鼓励使用复合赋值运算符,因为它只评估LHS一次。

来自C ++ 11标准:

  

5.17分配和复合赋值运算符

     

...

     

7 E1 op = E2形式的表达式的行为等同于E1 = E1 op E2,但E1仅被评估一次。

如果您有一个返回对象引用的函数,那么当您使用复合赋值运算符时,它会更有效并且更不容易出错。

E.g。

std::vector<int> v(10, 1);
v[4] <<= 2;

优于

std::vector<int> v(10);
v[4] = v[4] << 2;

答案 2 :(得分:0)

左移分配<<=

x <<= y将x向左移位

右移分配>>=

x >>= y右移x位

Read This了解有关c ++中按位运算符的更多信息。

答案 3 :(得分:0)

在c中,一般来说,一个等于跟随它的运算符是“执行操作,并将结果放回同一个变量中”的简写。

x = x >> 4; // shift x right by 4 bits
x >>= 4;    // exactly the same as above
x <<= 3;  // shift x left by 3 bits

这假设x是一个数字类型,如long,unsigned short等。

如果x不是数字,那么原始程序员可能会将该操作定义为c ++中的重载运算符,例如,从字符串中删除n个字符。

答案 4 :(得分:0)

那些被称为复合赋值运算符。其中近10种采用C / C ++语言。前+= -= *= <<= >>=。当其中一个操作数与要分配的最终结果相同的变量相同时,在二进制操作中,这可以用作短手语法。 Ex a=a+b可以写为a+=b。在同一个a=a<<2中可以写为a<<=2。其他语言也支持这种类型的语法糖。