Thứ Ba, 28 tháng 9, 2021

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

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


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.


  • + : 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);

}


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--);

}


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ỌNVIẾT ĐẦY ĐỦ
=a = ba = b
+=a += ba = a+b
-=a -= ba = a-b
*=a *= ba = a*b
/=a /= ba = a/b
%=a %= ba = 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;

}


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ĨAVÍ DỤ
==so sánh bằng7 == 3 cho kết quả là 0
>so sánh lớn hơn5 > 1 cho kết quả là 1
<so sánh nhỏ hơn5 < 2 cho kết quả là 0
!=so sánh khác5 != 4 cho kết quả là 1
>=lớn hơn hoặc bằng8 >= 3 cho kết quả là 1
<=nhỏ hơn hoặc bằng5 <= 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);

}


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));

}


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));

}


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:

ABA & BA | BA ^ B
00000
01011
11110
10011


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;

}


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ânNếu điều kiện là true ? thì giá trị X : Nếu không thì giá trị Y

0 bình luận:

Đăng nhận xét