7. Dart Operators

7. Dart Operators

AI Reading

Quick summary of this article

Dart provides a wide range of operators to handle different programming tasks, including arithmetic, relational, logical, assignment, unary, conditional, type testing, and bitwise operations. These operators allow developers to perform mathematical calculations, compare values, make logical decisions, assign values efficiently, manipulate single operands, check types at runtime, and work with binary data.

  • Arithmetic operators (+, -, *, /, %) handle basic math; division returns a decimal value, while modulus returns the remainder.
  • Relational operators (==, !=, >, <, >=, <=) compare values and return true or false.
  • Logical operators (&&, ||, !) combine boolean conditions; assignment operators like +=, -=, *=, /=, and %= offer shorthand for updating variables.
  • Unary operators (++ and --) increment or decrement values; the conditional ternary operator (? 🙂 selects between two expressions based on a condition.
  • Bitwise operators (&, |, ^, ~, <<, >>) work on binary representations—for example, 5 & 3 gives 1, and 5 << 1 shifts bits to produce 10.

                                   Dart Operators

Dart provides a variety of operators for different kinds of operations, such as arithmetic, relational, logical, and assignment operations. Here is an overview of the common operators in Dart with examples:

 1. Arithmetic Operators

Used for performing mathematical operations.

void main() {
  int a = 10;
  int b = 3;

  print('Addition: ${a + b}');        // 13
  print('Subtraction: ${a - b}');     // 7
  print('Multiplication: ${a * b}');  // 30
  print('Division: ${a / b}');        // 3.3333333333333335
  print('Modulus: ${a % b}');         // 1
}
  2. Relational Operators

Used for comparing two values.

void main() {
  int a = 10;
  int b = 20;

  print('Equal to: ${a == b}');        // false
  print('Not equal to: ${a != b}');    // true
  print('Greater than: ${a > b}');     // false
  print('Less than: ${a < b}');        // true
  print('Greater than or equal to: ${a >= b}'); // false
  print('Less than or equal to: ${a <= b}');    // true
}
3. Logical Operators

Used for logical operations, often with boolean values.

void main() {
  var x = 10;
  var y = 20;


  print('Logical AND: ${(x == 10) && (y == 20)}'); // true


  print('Logical OR: ${(x != 0) || (y != 0)}'); // true


  print('Logical NOT: ${!(x != 0)}'); // false
}
  4. Assignment Operators

Used to assign values to variables.

void main() {
  int a = 10;
  a += 5;  
A = a+5


// Equivalent to: a = a + 5


  print('a += 5: $a');  // 15

  a -= 3;  // Equivalent to: a = a - 3
  print('a -= 3: $a');  // 12

  a *= 2;  // Equivalent to: a = a * 2
  print('a *= 2: $a');  // 24

  a /= 4;  // Equivalent to: a = a / 4
  print('a /= 4: $a');  // 6.0

  a %= 3;  // Equivalent to: a = a % 3
  print('a %= 3: $a');  // 0.0
}
```
5. Unary Operators

Used for operations on a single operand.

void main() {
  int a = 5;


  a++;
  //a = a + 1;
  print('Increment: $a'); // 6


  a--;
  print('Decrement: $a'); // 5
}
6. Conditional (Ternary) Operator

Used for conditional expressions.

void main() {
  int a = 5;
  int b = 10;

  String result = a > b ? 'a is greater' : 'b is greater';
  print(result);  // b is greater
}
```
 7. Type Test Operators

Used for checking types at runtime.

void main() {
  var x = 100;
  var y = 'Hello';

  print('x is int: ${x is int}');      // true
  print('y is String: ${y is String}'); // true
  print('x is not double: ${x is! double}'); // true
}
```
  8. Bitwise and Shift Operators

Used for bitwise and shift operations.

void main() {

  int a = 5; // 0101 in binary
  int b = 3; // 0011 in binary

  print('Bitwise AND: ${a & b}');    // 1 (0001)
  print('Bitwise OR: ${a | b}');     // 7 (0111)
  print('Bitwise XOR: ${a ^ b}');    // 6 (0110)
  print('Bitwise NOT: ${~a}');       // -6
  print('Left shift: ${a << 1}');    // 10 (1010)
  print('Right shift: ${a >> 1}');   // 2 (0010)


}

These operators cover most of the common operations you’ll need to perform in Dart. Each operator is used for specific types of operations, making Dart a powerful and flexible language for various programming tasks.

====================================

Bitwise in Details

I can help you visualize how bitwise operations work by breaking down the binary representations of the numbers and showing how the operations are performed step-by-step.

Let’s start with the numbers you provided:

  • a = 5 (binary: 0101)
  • b = 3 (binary: 0011)

Bitwise AND (a & b)

 

  0101

& 0011

——

  0001

The result of 5 & 3 is 1 (binary: 0001).

Bitwise OR (a | b)

  0101

| 0011

——

  0111

The result of 5 | 3 is 7 (binary: 0111).

Bitwise XOR (a ^ b)

  0101

^ 0011

——

  0110

The result of 5 ^ 3 is 6 (binary: 0110).

Bitwise NOT (~a)

 

  0101   // a (5)

~ —-

  1010   // Invert all bits: -6 in two’s complement form

The result of ~5 is -6.

Left Shift (a << 1)

 0101   // a (5)

<< 1

——

  1010   // Shift left by 1: 10 in decimal

The result of 5 << 1 is 10 (binary: 1010).

Right Shift (a >> 1)

 0101   // a (5)

>> 1

——

  0010   // Shift right by 1: 2 in decimal

The result of 5 >> 1 is 2 (binary: 0010).

Full Example in Dart

void main() {
  int a = 5; // 0101 in binary
  int b = 3; // 0011 in binary

  print('Bitwise AND: ${a & b}');    // 1 (0001)
  print('Bitwise OR: ${a | b}');     // 7 (0111)
  print('Bitwise XOR: ${a ^ b}');    // 6 (0110)
  print('Bitwise NOT: ${~a}');       // -6
  print('Left shift: ${a << 1}');    // 10 (1010)
  print('Right shift: ${a >> 1}');   // 2 (0010)
}

Explanation of Each Operation

  1. Bitwise AND (a & b):
    • Both bits must be 1 to get 1. Result: 0001.
  2. Bitwise OR (a | b):
    • Either bit can be 1 to get 1. Result: 0111.
  3. Bitwise XOR (a ^ b):
    • Bits must be different to get 1. Result: 0110.
  4. Bitwise NOT (~a):
    • Inverts all the bits. The result is -6 because in two’s complement, ~0101 becomes 1010, which is -6 in decimal.
  5. Left Shift (a << 1):
    • Shifts bits to the left by 1 position, filling with 0. Result: 1010.
  6. Right Shift (a >> 1):
    • Shifts bits to the right by 1 position, filling with the sign bit for signed integers. Result: 0010.

This breakdown should help you understand how the bitwise operations work with binary numbers.

 

 

 

 

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *