Understanding x=!x; inside an "if" operator

Hello, I'm currently learning with the Arduino starter kit and I pretty confused about an operator that is used in the code of the 10th project in the project book "Project 10: Zoetrope".

Here is all the code:

const int controlPin1 = 2; // connected to pin 7 on the H-bridge
const int controlPin2 = 3; // connected to pin 2 on the H-bridge
const int enablePin = 9;   // connected to pin 1 on the H-bridge
const int directionSwitchPin = 4;  // connected to the switch for direction
const int onOffSwitchStateSwitchPin = 5; // connected to the switch for turning the motor on and off
const int potPin = A0;  // connected to the potentiometer's output

// create some variables to hold values from your inputs
int onOffSwitchState = 0;  // current state of the On/Off switch
int previousOnOffSwitchState = 0; // previous position of the on/off switch
int directionSwitchState = 0;  // current state of the direction switch
int previousDirectionSwitchState = 0;  // previous state of the direction switch

int motorEnabled = 0; // Turns the motor on/off
int motorSpeed = 0; // speed of the motor
int motorDirection = 1; // current direction of the motor

void setup(){
  // intialize the inputs and outputs
  pinMode(directionSwitchPin, INPUT);
  pinMode(onOffSwitchStateSwitchPin, INPUT);
  pinMode(controlPin1, OUTPUT);
  pinMode(controlPin2, OUTPUT);
  pinMode(enablePin, OUTPUT);

  // pull the enable pin LOW to start
  digitalWrite(enablePin, LOW);
}

void loop(){
  // read the value of the on/off switch
  onOffSwitchState = digitalRead(onOffSwitchStateSwitchPin);
  delay(1);
  
  // read the value of the direction switch
  directionSwitchState = digitalRead(directionSwitchPin);
  
  // read the value of the pot and divide by 4 to get 
  // a value that can be used for PWM
  motorSpeed = analogRead(potPin)/4; 

  // if the on/off button changed state since the last loop()
  if(onOffSwitchState != previousOnOffSwitchState){
    // change the value of motorEnabled if pressed
    if(onOffSwitchState == HIGH){
      motorEnabled = !motorEnabled;
    }
  }

  // if the direction button changed state since the last loop()
  if (directionSwitchState != previousDirectionSwitchState) {
    // change the value of motorDirection if pressed 
    if (directionSwitchState == HIGH) {
      motorDirection = !motorDirection;
    }
  }  

  // change the direction the motor spins by talking
  // to the control pins on the H-Bridge
  if (motorDirection == 1) {
    digitalWrite(controlPin1, HIGH);
    digitalWrite(controlPin2, LOW);
  } 
  else {
    digitalWrite(controlPin1, LOW);
    digitalWrite(controlPin2, HIGH);
  }  

  // if the motor is supposed to be on
  if (motorEnabled == 1) {
    // PWM the enable pin to vary the speed
    analogWrite(enablePin, motorSpeed);
  }
  else { // if the motor is not supposed to be on
    //turn the motor off
    analogWrite(enablePin, 0);
  }
  // save the current On/Offswitch state as the previous 
  previousDirectionSwitchState = directionSwitchState;
  // save the current switch state as the previous
  previousOnOffSwitchState = onOffSwitchState;
}

Here is the part that I have problem understanding:

 if(onOffSwitchState != previousOnOffSwitchState){
    // change the value of motorEnabled if pressed
    if(onOffSwitchState == HIGH){
     motorEnabled = !motorEnabled;
    }
  }

I want to know what does =! mean, I've been looking into some reference but I cant find a detailed explanation of this operator.
As far as I know this operator changes the state of a variable when the variable has two possible states. But in this case the code is like "If this 2 conditions are met, then change the state of this variable", and this is the part I don't get.

The book says "If there is a difference between the current switch state and the previous, and the switch in currently HIGH, set the motorPower variable to 1. If it is LOW, set the variable to 0."

What I understand from the code, is that if the conditions are met, it's going to change the state of the variable to a different state that it was. But how can I know if it's going to be 1 or 0.
Please help me understand this.

Thanks in advance.
Regards

motorEnabled = !motorEnabled;

Means motorEnabled = NOT motorEnabled
In other words if motorEnabled, which is declared as an int, has a value of 1 before that line then after it its value will be 0 and vice versa.

But how can I know if it's going to be 1 or 0.

That depends on its value before doing the !motorEnabled.

Try this

void setup()
{
  Serial.begin(115200);
  int motorEnabled = 0;
  Serial.println(motorEnabled);
  motorEnabled = !motorEnabled;
  Serial.println(motorEnabled);
  motorEnabled = !motorEnabled;
  Serial.println(motorEnabled);
}

void loop()
{

!= performs a logical inversion, or NOT, operation. When that line is executed, if motorEnabled is 0, it will be set to "true", which is defined as 1. if it has ANY value other than 0, it will be set to "false", which is defined as 0.

Regards,
Ray L.

Thanks a lot. Now its more clear to me, I'm going to write some code to light a LED to test this.

Regards