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;

これは、「複合代入」演算子と呼ばれる演算子ファミリーの一部です。それらの完全なリストはここで見ることができます:複合代入演算子(ウィキペディア)

*=はそうではないので、ビット単位の演算子ではないことに注意してください*。ただし、一部の複合演算子はビット単位です。たとえば、&=演算子はビット単位&です。

于 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;

同じ種類のビット演算子がありますが、これはビット演算子ではありません。

  • &=-および-割り当て、
  • |=-または-割り当て、
  • ^=--xor-assign。

ファミリの他の演算子には、、、、、およびが含ま+=れます。-=/=%=

于 2013-03-17T01:20:24.600 に答える
1

コードを理解している場合

rot += 5;

あなたは理解する必要があります

rot *= 5;

腐敗に5を加える代わりに、5を掛けます。

于 2013-03-17T01:25:10.233 に答える