Skip to main content
The ^= operator is the XOR (exclusive OR) assignment operator. It performs an XOR operation between the left-hand operand and the right-hand operand, and subsequently assigns the evaluated result back to the left-hand operand.

Syntax

leftOperand ^= rightOperand;
This expression is syntactic sugar for the expanded assignment:
leftOperand = leftOperand ^ rightOperand;

Type Compatibility and Mechanics

Because ^= is a compound assignment operator derived from ^, it can be used with any type that defines operator ^. The mechanics of the operation depend on the underlying type:
  • Integers (int and BigInt): Performs a bitwise XOR. The operator evaluates the operands at the binary level, comparing them bit by bit. For each corresponding bit position, it yields 1 if the bits are different (one is 0 and the other is 1), and 0 if the bits are identical (both are 0 or both are 1).
  • Booleans (bool): Performs a logical XOR. It evaluates to true if exactly one of the operands is true, and false if both operands share the same boolean state.
  • Custom Classes: Developers can overload operator ^ within custom classes. Doing so automatically enables the use of the ^= operator for instances of those classes.

Execution Examples

void main() {
  // 1. Bitwise XOR Assignment (int)
  int a = 12; // Binary representation: 1100
  int b = 10; // Binary representation: 1010
  
  a ^= b;     
  
  // Bitwise evaluation:
  //   1100 (12)
  // ^ 1010 (10)
  // -----
  //   0110 (6)
  
  print(a); // Output: 6

  // 2. Logical XOR Assignment (bool)
  bool flag = true;
  
  flag ^= true; // Evaluates to: true ^ true
  
  print(flag); // Output: false
}
In both executions, the left-hand variable is mutated in place, replacing its original value with the evaluated result of the XOR operation.
Tired of Poor Dart Skills? Fix That With Deep Grasping!Learn More