0

我一直在查看一些与 C 非常相似的 RobotC 代码(而且我没有足够的声誉来制作新的 RobotC 标签),并且遇到了 *= 运算符。我已经用谷歌搜索了很多,但我所能得到的只是它是 C 中的按位运算符。似乎没有人确切地说明它的作用,但是如果你们能提供帮助,我将不胜感激。

rot *= 5;

这是我找到它的代码。该功能所做的只是将机器人重新定向为始终面向北方。

//Turns back to North
void TurnStraight(int cdegree) //cdegree is the sensor value read by the compass sensor
{
  int rot = cdegree % 360;
  int mot = 1;
  //stop when the NXT facing North
  if (cdegree == 0){
     return;
  }
  //reset the encoders value to avoid overflaow
   clear_motor_encoders();

   if (cdegree > 180 && cdegree < 360){
      rot = 360 - rot;
      mot = 0;
   }

   rot *= 5;  // ratio between the circumference of the tire to the circumference of the     rotation circle around itself
   switch (mot){
     case 1:
     moveTo(rot/2,1);
     break;
     case 0:
     moveTo(rot/2,-1);
     break;
     case -1:
     moveTo(rot,1);
     break;
   }
}


void clear_motor_encoders()
{
   nMotorEncoder[motorA] = 0;
}

void moveTo(int rot, int direction)
{
   nSyncedMotors = synchAC;
   nSyncedTurnRatio = -100;
   nMotorEncoderTarget[motorA] = rot;
   motor[motorA] = direction * 50;
   while (nMotorRunState[motorA] != runStateIdle) ;
   motor[motorA] = 0;

}

这当然不是我的代码,我只是想知道它是如何工作的。

4

4 回答 4

8

它相当于:

rot = rot * 5;

它是称为“复合赋值”运算符的运算符家族的一部分。您可以在此处查看它们的完整列表:复合赋值运算符(维基百科)

请注意,这*=不是按位运算符,因为*不是。但是一些复合运算符是按位的 - 例如,&=运算符是按位的,因为&is。

于 2013-03-17T01:19:47.377 回答
2

与大多数编程语言一样,这是var = var * 5.

所以其他例子var += 3等于一个陈述var = var + 3

于 2013-03-17T01:20:15.457 回答
2

这是乘法赋值运算符。意思是一样的

rot = rot * 5;

这不是位运算符,尽管有相同类型的位运算符:

  • &=- 并分配,
  • |=- 或分配,
  • ^=- 异或分配。

该系列的其他运算符包括+=-=/=%=

于 2013-03-17T01:20:24.600 回答
1

如果你看懂代码

rot += 5;

你应该明白

rot *= 5;

不是将 5 添加到 rot,而是将其乘以 5。

于 2013-03-17T01:25:10.233 回答