2013-03-17 5 views
0

Я смотрел на некоторый код RobotC, который очень похож на C (и у меня нет достаточной репутации для создания нового тега RobotC), и я наткнулся на * = operator. Я немного поработал с ним в Google, но все, что я могу сделать, это побитовый оператор в 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; 

} 

Это не мой код, конечно, я хотел бы просто знать, как это работает.

+7

Это может быть трудно найти в Google для '* =', но операторы «C» легко доставили вас в [Википедия] (http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Compound_assignment_operators) –

+1

Ознакомьтесь с [...] tory C programming "] (http://www.eskimo.com/~scs/cclass/cclass.html), датированный, но очень актуальный.И прежде чем вы начнете спрашивать, почему ваша программа выходит из строя из-за очевидных проблем с указателем, прочитайте и поймите [Ted Jensen's [«Учебник по указателям и массивам в C»] (http://pw1.netcom.com/~tjensen/ptr/pointers. htm) (также довольно устаревший, но существенный). – vonbrand

ответ

8

Это эквивалентно:

rot = rot * 5; 

Это часть семейства операторов называется «присваивания» операторы. Вы можете посмотреть их полный список: Compound Assignment Operators (Wikipedia)

Обратите внимание, что *= не является побитовым оператором, потому что * нет. Но некоторые составные операторы побитовые - например, оператор &= поразряден, так как & есть.

+0

@ dasblinkenlight oh wow мне никогда не приходило в голову, что вы можете использовать * = точно так же, как + = Спасибо! –

2

Как и в большинстве языков программирования, это краткая форма для var = var * 5.

Другие примеры var += 3 соответствует заявлению от var = var + 3.

2

Это оператор с множественным назначением. Это означает то же самое, как

rot = rot * 5; 

Это не оператор побитовое, хотя есть битовые операторы одного и того же рода:

  • &= - и-правопреемника,
  • |= - или-Присвоить ,
  • ^= - xor-assign.

Другие операторы семейства включают +=, -=, /= и %=.

1

Если вы понимаете код

rot += 5; 

вы должны понимать

rot *= 5; 

Вместо добавления 5 гнить, вы умножив его на 5.

Смежные вопросы