Toán tử trong C#

Dẫn nhập

Bạn đã tìm hiểu về biến và kiểu dữ liệu trong chương trình C#. Bài học hôm nay sẽ giúp bạn hiểu rõ hơn về toán tử trong C#, và cách thực hiện các phép toán giữa các biến cũng như xử lý dữ liệu của biến.

Nội dung

Để hiểu rõ toán tử trong C#, chúng ta nên có kiến thức cơ bản về các phần sau:

  • Cấu trúc lệnh của C# viết trên nền Console Application.
  • Cấu trúc nhập xuất của C# trên nền Console Application.
  • Biến và kiểu dữ liệu trong C#.

Trong bài học này, chúng ta sẽ tìm hiểu về các vấn đề sau:

  • Khái niệm về toán tử và các loại toán tử.
  • Cú pháp và ý nghĩa của từng toán tử.
  • Độ ưu tiên của các toán tử.
  • Ví dụ chương trình sử dụng một số toán tử.

Toán tử là gì?

Toán tử trong C# là những công cụ để thao tác với dữ liệu. Mỗi toán tử đại diện cho một phép toán cụ thể được thực hiện trên dữ liệu. Trong C#, có 6 loại toán tử cơ bản:

  • Toán tử toán học.
  • Toán tử quan hệ.
  • Toán tử logic.
  • Toán tử khởi tạo và gán.
  • Toán tử so sánh trên bit.
  • Toán tử khác.

Cú pháp và ý nghĩa của từng toán tử

Toán tử toán học

Toán tử toán học thực hiện các phép tính cơ bản như cộng, trừ, nhân, chia và các phép tính khác. Dưới đây là một số toán tử toán học và ý nghĩa của chúng:

  • +: Thực hiện phép cộng hai toán hạng.
  • -: Thực hiện phép trừ hai toán hạng.
  • *: Thực hiện phép nhân hai toán hạng.
  • /: Thực hiện phép chia lấy phần nguyên (nếu cả hai toán hạng là số nguyên) hoặc phép chia thường (nếu một trong hai toán hạng không phải số nguyên).
  • %: Thực hiện phép chia lấy dư.

Toán tử quan hệ

Toán tử quan hệ sử dụng để so sánh giá trị của hai toán hạng và trả về kết quả là true hoặc false. Dưới đây là một số toán tử quan hệ và ý nghĩa của chúng:

  • ==: So sánh hai toán hạng có bằng nhau hay không. Trả về true nếu bằng, ngược lại trả về false.
  • !=: So sánh hai toán hạng có khác nhau hay không. Trả về true nếu khác, ngược lại trả về false.
  • >: So sánh toán hạng bên trái có lớn hơn toán hạng bên phải hay không. Trả về true nếu lớn hơn, ngược lại trả về false.
  • <: So sánh toán hạng bên trái có nhỏ hơn toán hạng bên phải hay không. Trả về true nếu nhỏ hơn, ngược lại trả về false.
  • >=: So sánh toán hạng bên trái có lớn hơn hoặc bằng toán hạng bên phải hay không. Trả về true nếu lớn hơn hoặc bằng, ngược lại trả về false.
  • <=: So sánh toán hạng bên trái có nhỏ hơn hoặc bằng toán hạng bên phải hay không. Trả về true nếu nhỏ hơn hoặc bằng, ngược lại trả về false.

Toán tử logic

Toán tử logic sử dụng để thực hiện các phép logic và trả về kết quả là true hoặc false. Dưới đây là một số toán tử logic và ý nghĩa của chúng:

  • &&: Toán tử logic AND. Trả về true nếu tất cả toán hạng đều mang giá trị true, ngược lại trả về false.
  • ||: Toán tử logic OR. Trả về true nếu có ít nhất một toán hạng mang giá trị true, ngược lại trả về false.
  • !: Toán tử logic NOT. Đảo ngược trạng thái logic của toán hạng. Trả về true nếu toán hạng là false, ngược lại trả về false.

Toán tử khởi tạo và gán

Toán tử khởi tạo và gán được sử dụng để lưu giữ giá trị cho một biến nào đó. Dưới đây là một số toán tử khởi tạo và gán phổ biến:

  • =: Gán giá trị của toán hạng bên phải cho toán hạng bên trái.
  • +=: Cộng toán hạng bên trái với toán hạng bên phải và gán kết quả lại cho toán hạng bên trái.
  • -=: Trừ toán hạng bên phải từ toán hạng bên trái và gán kết quả lại cho toán hạng bên trái.
  • *=: Nhân toán hạng bên trái với toán hạng bên phải và gán kết quả lại cho toán hạng bên trái.
  • /=: Chia toán hạng bên trái cho toán hạng bên phải và gán kết quả lại cho toán hạng bên trái.
  • %=: Chia lấy dư toán hạng bên trái cho toán hạng bên phải và gán kết quả lại cho toán hạng bên trái.

Toán tử so sánh trên bit

Toán tử so sánh trên bit được sử dụng để thực hiện các phép toán logic trên từng bit của hai toán hạng và trả về kết quả là một giá trị mới. Dưới đây là một số toán tử so sánh trên bit và ý nghĩa của chúng:

  • &: Sao chép bit 1 nếu nó tồn tại trong cả hai toán hạng tại vị trí tương ứng, ngược lại bit kết quả bằng 0.
  • |: Sao chép bit 1 nếu nó tồn tại trong một trong hai toán hạng tại vị trí tương ứng, ngược lại bit kết quả bằng 0.
  • ^: Sao chép bit 1 nếu nó chỉ tồn tại trong một toán hạng tại vị trí tương ứng, ngược lại bit kết quả bằng 0.
  • ~: Đảo ngược bit 0 thành 1 và ngược lại.
  • <<: Dịch trái n bit. Toán hạng bên trái được dịch trái n bit với n được xác định bởi toán hạng bên phải.
  • >>: Dịch phải n bit. Toán hạng bên trái được dịch phải n bit với n được xác định bởi toán hạng bên phải.

Toán tử khác

Ngoài những toán tử đã giới thiệu ở trên, trong C# còn có nhiều toán tử khác như sizeof(), typeof(), new, is, as, ?:, ,,… Tuy nhiên, những toán tử này ít được sử dụng trong thực tế nên không được trình bày chi tiết trong bài viết này.

Độ ưu tiên của toán tử

Độ ưu tiên của các toán tử biểu thị toán tử nào được ưu tiên thực hiện trước trong một biểu thức. Dưới đây là bảng tổng hợp độ ưu tiên của các toán tử trong C#:

Mức    Toán tử                          Thứ tự
Cao nhất    () [] .                      Trái sang phải
            + - ++ - ! ~ new sizeof typeof
                                       Phải sang trái
            * / %                         Trái sang phải
            + -                            Trái sang phải
            < > <= >=                     Trái sang phải
            == !=                         Trái sang phải
            &                            Trái sang phải
            ^                            Trái sang phải
            |                            Trái sang phải
            &&                           Trái sang phải
            ||                           Trái sang phải
            ?:                           Trái sang phải
            = += -= *= /= %=            Phải sang trái
            ,                            Thấp nhất

Bảng trên chỉ thể hiện những toán tử chúng ta đã học. Trong thực tế, còn có nhiều toán tử khác, nhưng chúng ít được sử dụng nên không đề cập trong bài viết này.

Để thay đổi thứ tự thực hiện của các toán tử trong biểu thức, bạn có thể sử dụng cặp ngoặc tròn để nhóm chúng lại.

Ví dụ chương trình sử dụng một số toán tử

Ví dụ 1: Các phép toán cơ bản

static void Main(string[] args) {
    int a, b, c;
    a = b = (c = 9) + 1; // khởi tạo giá trị: a = 10, b = 10, c = 9
    a += b; // tương đương a = a + b
    b = c++; // thực hiện gán giá trị c cho biến b sau đó thực hiện c = c + 1
    -c; // thực hiện c = c - 1
    Console.WriteLine(" a = {0}, b = {1}, c = {2}", a, b, c);
    Console.ReadKey();
}

Kết quả khi chạy chương trình:

 a = 20, b = 10, c = 10

Ví dụ 2: Kết hợp các phép toán để kiểm tra số chẵn lẻ

static void Main(string[] args) {
    string strSoNguyen; // Biến chứa dữ liệu nhập vào từ bàn phím
    int SoNguyen; // Biến chứa số nhập vào từ bàn phím
    string KetQua; // Biến chứa kết quả kiểm tra số vừa nhập là chẵn hay lẻ

    strSoNguyen = Console.ReadLine(); // Đọc dữ liệu nhập vào từ bàn phím (dữ liệu này ở dạng chuỗi) sau đó gán giá trị vào biến strSoNguyen
    SoNguyen = Int32.Parse(strSoNguyen); // Ép kiểu dữ liệu vừa nhập vào (dạng chuỗi) sang dạng số rồi gán giá trị vào biến SoNguyen
    KetQua = (SoNguyen % 2 == 0) ? "số chẵn" : "số lẻ"; // Sử dụng toán tử 3 ngôi để kiểm tra số chẵn lẻ
    Console.WriteLine("{0} là {1}", SoNguyen, KetQua); // In kết quả ra màn hình
    Console.ReadKey();
}

Đầu tiên, chúng ta có 3 biến: strSoNguyen, SoNguyen, và KetQua. Biến strSoNguyen chứa giá trị nhập vào từ bàn phím dưới dạng chuỗi. Biến SoNguyen chứa giá trị nhập vào từ bàn phím sau khi ép kiểu sang kiểu số. Biến KetQua chứa kết quả kiểm tra số vừa nhập là chẵn hay lẻ.

Tiếp theo, chúng ta nhận giá trị nhập vào từ bàn phím bằng lệnh Console.ReadLine() và gán giá trị cho biến strSoNguyen. Sau đó, chúng ta ép kiểu giá trị của biến strSoNguyen sang kiểu số và gán giá trị vào biến SoNguyen.

Sử dụng toán tử 3 ngôi để kiểm tra xem số nhập vào có chia hết cho 2 hay không (nếu chia hết cho 2 thì kết quả của phép chia dư với 2 sẽ là 0 và biểu thức SoNguyen % 2 == 0 sẽ trả về true). Nếu chia hết, biến KetQua sẽ được gán giá trị là "số chẵn", ngược lại sẽ là "số lẻ".

Cuối cùng, chúng ta in kết quả ra màn hình.

Đó là một số ví dụ cơ bản về toán tử trong C#. Hi vọng qua bài viết này, bạn đã hiểu rõ hơn về các toán tử và cách sử dụng chúng trong chương trình C#. Hãy luyện tập và áp dụng những kiến thức này vào thực tế để nâng cao kỹ năng lập trình của mình.

Cảm ơn bạn đã theo dõi bài viết này. Nếu bạn có bất kỳ câu hỏi hay góp ý nào, hãy để lại bình luận. Hãy luôn “Luyện tập – Thử thách – Không ngại khó”.

FEATURED TOPIC