Bài 8: Cách sử dụng toán tử trong lập trình C

Cách sử dụng toán tử trong lập trình C

Trong bài này chúng ta sẽ học cách sử dụng các toán tử trong lập trình C. Toán tử là gì, có các loại toán tử nào chúng ta thường hay sử dụng. Đây cũng là một phần rất quan trọng, các bạn nên học thật kĩ nhé!

Toán tử là gì?

Toán tử là một biểu tượng mà nói với trình biên dịch thực hiện một phép toán học nhất định hoặc thao tác hợp lý. Ngôn ngữ C có sẵn rất nhiều toán tử và cung cấp các kiểu toán tử sau đây:

  • Toán tử số học
  • Toán tử gán
  • Toán tử quan hệ
  • Toán tử logic
  • Toán tử bit
  • Toán tử đặc biệt

Types of Operators in C and C

Toán tử số học (Arithmetic Operators)

Toán tử số học 2 thành phần

Bảng dưới đây chỉ ra tất cả các toán tử số học được hỗ trợ bởi ngôn ngữ C. Được sử dụng để thực hiện các phép toán: cộng, trừ, nhân, chia,… trên các giá trị số (biến và hằng). Đây là các toán tử cần sự tham gia của 2 giá trị số nên được phân loại là các toán tử 2 ngôi.

Toán tử Ý nghĩa
+ phép toán cộng
phép toán trừ
* phép toán nhân
/ phép toán chia
% phép toán lấy số dư(chỉ áp dụng cho số nguyên)

VD:

#include <stdio.h>
 
int main(){
    int a, b;
    printf("\nNhập số a = "); scanf("%d", &a); 
    // Lưu ý nhập b != 0
    printf("\nNhập số b b = "); scanf("%d", &b); 
    // Phép (+)
    int sum = a + b;
    printf("\nPhép cộng: %d + %d = %d", a, b, sum);
    // Phép (-)
    int sub = a - b;
    printf("\nPhép trừ:%d - %d = %d", a, b, sub);
    // Phép (*)
    int mul = a * b;
    printf("\nPhép nhân:%d * %d = %d", a, b, mul);
    // Phép (/)
    float div = a / (float)b;
    printf("\nPhép chia:%d / %d = %f", a, b, div);
    // Phép (%)
    int mod = a % b;
    printf("\nPhép chia lấy số dư: %d %% %d = %d", a, b, mod);
}

Kết quả

toan tu

Toán tử tăng giảm

Toán tử tăng, giảm là 1 loại toán tử 1 ngôi, bao gồm:

  • Toán tử ++: Tăng giá trị lên 1 đơn vị
  • Toán tử --: Giảm giá trị đi 1 đơn vị

Khi đặt toán tử tăng giảm ở một lệnh riêng biệt, chúng cho ra kết quả như nhau.
Nhưng nếu đặt phép tăng, giảm trong một biểu thức lệnh khác kết quả sẽ khác nhau. Xét trường hợp tăng giảm biến a

  • Với a++ và a–: Chương trình sẽ thực hiện lệnh với a sau đó mới thực hiện tăng và giảm biến a
  • Với ++a và –a: Chương trình sẽ thực hiện tăng/giảm biến a sau đó mới thực hiện lệnh

VD:

#include <stdio.h>
 
int main(){
    int a;
    // Toán tử ++ với a = 5
    a = 5;
    a++;
    printf("a++ = %d \n", a);
    a = 5;
    ++a;
    printf("++a = %d \n", a);
    //Toán tử -- với a = 5
    a = 5;
    a--;
    printf("a-- = %d \n", a);
    a = 5;
    --a;
    printf("--a = %d \n", a);

    //Dùng toán tử tăng giảm phía trước và sau biến trong một lệnh khác 
    a = 5; 
    printf("Voi a = %d trong lenh printf \n", a);
    a = 5;
    printf("++a = %d \n", ++a);
    a = 5;
    printf("--a = %d \n", --a);
    a = 5;
    printf("a++ = %d \n", a++);
    a = 5;
    printf("a-- = %d \n", a--);
}

Kết quả

toan tu 2

Toán tử gán (Assignment Operators)

Toán tử gán dùng để gán 1 giá trị cho 1 biến. Cú pháp: <Biến A> = <Giá trị>; hoặc <Biến A> = <BiếnB>;

Ngoài ra toán tử gán còn sử dụng khi sử dụng chính nó để tính toán với một biến khác.

Toán tử Viết gọn Viết đầy đủ
= a = b a = b
+= a += b a = a+b
-= a -= b a = a-b
*= a *= b a = a*b
/= a /= b a = a/b
%= a %= b a = a%b

VD:

#include <stdio.h>
 
int main(){
    int a = 5, c;
    c = a;      // c is 5
    printf("c = %d\n", c);
    c += a;     // c is 10 => c = c + a
    printf("c = %d\n", c);
    c -= a;     // c is 5 => c = c - a
    printf("c = %d\n", c);
    c *= a;     // c is 25 => c = c * a
    printf("c = %d\n", c);
    c /= a;     // c is 5 => c = c / a
    printf("c = %d\n", c);
    c %= a;     // c = 0 => c = c % a
    printf("c = %d\n", c);
    
    return 0;
}

Kết quả

toan tu 3

Toán tử quan hệ (Relational Operators) hay toán tử so sánh

Toán tử quan hệ hay so sánh sử dụng các phép toán so sánh giữa các số, biến và hằng. Giá trị trả về là logic (true hoặc false tương ứng với 1 hoặc 0)

Các toán tử này sử dụng làm điều kiện trong các lệnh so sánh như if, case  hoặc while, for sẽ học trong các bài sau.

Toán tử Ý nghĩa Ví dụ
== so sánh bằng 7 == 3 cho kết quả là 0
> so sánh lớn hơn 5 > 1 cho kết quả là 1
< so sánh nhỏ hơn 5 < 2 cho kết quả là 0
!= so sánh khác 5 != 4 cho kết quả là 1
>= lớn hơn hoặc bằng 8 >= 3 cho kết quả là 1
<= nhỏ hơn hoặc bằng 5 <= 0 cho kết quả là 0

VD:

#include <stdio.h>
 
int main(){
 
    int a = 5, b = 5, c = 10;
    printf("%d == %d is %d \n", a, b, a == b);
    printf("%d == %d is %d \n", a, c, a == c);
    printf("%d > %d is %d \n", a, b, a > b);
    printf("%d > %d is %d \n", a, c, a > c);
    printf("%d < %d is %d \n", a, b, a < b);
    printf("%d < %d is %d \n", a, c, a < c);
    printf("%d != %d is %d \n", a, b, a != b);
    printf("%d != %d is %d \n", a, c, a != c);
    printf("%d >= %d is %d \n", a, b, a >= b);
    printf("%d >= %d is %d \n", a, c, a >= c);
    printf("%d <= %d is %d \n", a, b, a <= b);
    printf("%d <= %d is %d \n", a, c, a <= c);
}

Kết quả:

toan tu 6

Toán tử Logic (Logic Operators) hay so sánh logic

Toán tử logic là toán tử sử dụng các mệnh đề logic để so sánh 2 phần tử logic, giá trị trả về là logic (true hoặc false tương ứng với 1 hoặc 0)

Các toán tử này thường được sử dụng để nối các điều kiện trong các lệnh so sánh như if, case  hoặc while, for.

  • Toán tử &&: là toán tử AND, trả về true khi và chỉ khi tất cả các toán hạng đều đúng.
  • Toán tử ||: là toán tử OR, trả về true khi có ít nhất 1 toán hạng đúng.
  • Toán tử !: là toán tử NOT, phủ định giá trị của toán hạng.

AND

(a > 0 && a < 10). Nếu a lớn hơn 0 và a < 10 thì ra giá trị true, các giá trị còn lại sẽ ra giá trị false. Hoặc nói đơn giản là thỏa mãn cả 2 điều kiện

#include <stdio.h>
 
int main(){
    int a;
    printf("nhap a = ");
    scanf("%d", &a);
    printf("\n%d", (a > 0 && a < 10));
}

Kết quả

toan tu 4 1

OR

(a > 15 || a < 10). Nếu a lớn hơn 5 hoặc a = 10 thì true, nếu không thỏa mãn cả 2 điều kiện thì là false

#include <stdio.h>
 
int main(){
    int a;
    printf("nhap a = ");
    scanf("%d", &a);
    printf("\n%d", (a > 15 || a < 10));
}

Kết quả

toan tu 5

NOT

!a. Sẽ trả về 0 nếu a = 1, trả về 1 nếu a = 0. Nó đơn giản chỉ là đảo ngược. Lưu ý khi ta sử dụng NOT với các số lớn hơn 1 thì kết quả cũng tương tư.
Ví dụ: nếu a = 255 thì !a = 0, nếu a = 0 thì !a sẽ bằng 1.

Toán tử thao tác bit ( Bitwise Operators )

Toán tử thao tác bit làm việc trên đơn vị bit, tính toán biểu thức theo từng bit

Phép đảo và dịch

Có 3 toán tử 1 ngôi thao tác theo bit:

  • ~ :  Toán tử đảo, đảo ngược bit 0 thành 1 và ngược lại
  • <<: Toán tử dịch trái. Giá trị toán hạng trái được dịch chuyển sang trái bởi số các bit được xác định bởi toán hạng bên phải
  • >>: Toán tử dịch phải. Giá trị toán hạng trái được dịch chuyển sang phải bởi số các bit được xác định bởi toán hạng bên phải

VD:    A = 0011 1100

~A = 1100 0011: tương ứng với – 61

A<<2 = 1111 0000: tương ứng với 240

A>>2 = 0000 1111: tương ứng với 15

Ngoài ra toán tử dịch 1 bit còn được viết gọn như sau: <<A hoặc >>A

Phép toán logic

Bảng dưới đây về toán tử thao tác bit 2 ngôi là & (AND) , | (OR), và ^ (NOR) như sau:

A B A & B A | B A ^ B
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

VD: Giả sử nếu A = 60; và B = 13; thì bây giờ trong định dạng nhị phân chúng sẽ là như sau:

A = 0011 1100

B = 0000 1101

—————–

A&B = 0000 1100: tương ứng là 12

A|B = 0011 1101 : tương ứng là 12

A^B = 0011 0001: tương ứng là 49

#include <stdio.h>
int main()
{
printf("Toan tu thao tac bit \n\n");
int a = 60, b = 13;
printf(" Bitwise AND operation %d & %d : %d\n",a,b,a&b);
printf(" Bitwise OR operation %d | %d : %d\n",a,b,a|b);
printf(" Bitwise XOR operation %d ^ %d : %d\n",a,b,a^b);
printf(" Bitwise ONE'S COMPLEMENT ~ %d operation : %d\n",a,~a);
return 0;
}

Kết quả

toan tu 8

Các toán tử hỗn hợp (Miscellaneous Operators)

Các toán tử đặc biệt dùng trong các trường hợp nhất định như

& Trả lại địa chỉ của một biến. &a; sẽ cho địa chỉ thực sự của biến a.
* Trỏ tới một biến. *a; sẽ trỏ tới biến a.
? : Biểu thức điều kiện tam phân Nếu điều kiện là true ? thì giá trị X : Nếu không thì giá trị Y

Kết

Nắm rõ đặc tính và cách sử dụng các toán tử trong lập trình C là một việc bất kì lập trình viên nào đều phải học. Đây là một kiến thức rất quan trọng, xuyên xuốt quá trình học lập trình.
Hi vọng các bạn đã hiểu về nó, tiếp tục tới bài tiếp theo của Serie Học lập trình C từ A đến Z

Nếu thấy có ích hãy chia sẻ bài viết và tham gia nhóm Nghiện Lập Trình để giao lưu và học hỏi nhé

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *