1. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 1/17
Các toán tử
Trong lập trình C, các toán tử có thể được phân ra thành các nhóm sau:
Toán tử số học
Toán tử so sánh
Toán tử luận lý
Toán tử bitwise
Toán tử gán
Các toán tử khác
Toán tử số học
Toán tử số học là những toán tử thực hiện các phép tính như cộng, trừ,
nhân, chia trên các toán hạng.
Các toán tử trong nhóm này được liệt kê trong bảng sau:
Toán tử Mô tả Cú pháp
+ Cộng a + b hoặc +a
- Trừ a - b hoặc -a
* Nhân a * b
/ Chia a / b
2. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 2/17
% Modulo - chia lấy phần dư a % b
++ Tăng 1 a++ hoặc ++a
-- Giảm 1 a-- hoặc --a
Với các toán tử ++ và --, vị trí của chúng (trước hoặc sau toán hạng) có ý
nghĩa khác nhau:
Đứng trước: với ++a, a sẽ tăng lên 1, rồi sau đó biểu thức mới được
thực hiện.
Đứng sau: với a++, thì biểu thức sẽ được thực hiện với giá trị hiện tại
của a, sau đó a mới được tăng lên 1. Cụ thể được cho trong bảng
sau, với giá trị ban đầu của a là 1:
Vị trí Toán tử
Ví dụ
Biểu thức
Kết quả
a b
Trước ++ b = ++a; 2 2
Sau ++ b = a++; 2 1
Trước -- b = --a; 0 0
Sau -- b = a--; 0 1
Ví dụ sau minh họa cách sử dụng các toán tử trong nhóm toán tử số học:
3. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 3/17
#include <stdio.h>
int main()
{
int a = 11;
int b = 5;
int c ;
c = a + b; // c = 16
printf("a + b = %dn", c);
c = a - b; // c = 6
printf("a - b = %dn", c);
c = a * b; // c = 55
printf("a * b = %dn", c);
c = a / b; // c = 2
printf("a / b = %dn", c);
c = a % b; // c = 1
printf("a %% b = %dn", c);
printf("++a = %dn", ++a);
printf("--a = %dn", --a);
return 0;
}
Sau khi biên dịch và chạy, kết quả sau sẽ được xuất ra:
4. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 4/17
a + b = 16
a - b = 6
a * b = 55
a / b = 2
a % b = 1
++a = 12
--a = 11
Toán tử so sánh
Toán tử so sánh (hay toán tử quan hệ) là những toán tử dùng để kiểm tra
mối quan hệ giữa hai toán hạng. Bảng sau mô tả chi tiết các toán tử nằm
trong nhóm này:
Toán tử Mô tả Cú pháp
Ví dụ
a b Kết quả
== Bằng a == b 5 5 1
!= Không bằng a != b 5 4 1
> Lớn hơn a > b 5 4 1
< Nhỏ hơn a < b 4 5 1
>= Lớn hơn hoặc bằng a >= b 5 5 1
<= Nhỏ hơn hoặc bằng a <= b 5 5 1
Ví dụ sau minh họa cách sử dụng các toán tử trong nhóm toán tử so sánh:
5. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 5/17
#include <stdio.h>
int main()
{
int a = 5;
int b = 5;
int c = 4;
int d = 6;
printf("%d == %d = %d n", a, b, a == b); // true
printf("%d == %d = %d n", a, c, a == c); // false
printf("%d == %d = %d n", a, d, a == d); // false
printf("%d != %d = %d n", a, b, a != b); // false
printf("%d != %d = %d n", a, c, a != c); // true
printf("%d != %d = %d n", a, d, a != d); // true
printf("%d > %d = %d n", a, b, a > b); // false
printf("%d > %d = %d n", a, c, a > c); // true
printf("%d > %d = %d n", a, d, a > d); // false
printf("%d < %d = %d n", a, b, a < b); // false
printf("%d < %d = %d n", a, c, a < c); // false
printf("%d < %d = %d n", a, d, a < d); // true
printf("%d >= %d = %d n", a, b, a >= b); // true
printf("%d >= %d = %d n", a, c, a >= c); // true
printf("%d >= %d = %d n", a, d, a >= d); // false
6. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 6/17
printf("%d <= %d = %d n", a, b, a <= b); // true
printf("%d <= %d = %d n", a, c, a <= c); // false
printf("%d <= %d = %d n", a, d, a <= d); // true
return 0;
}
Sau khi biên dịch và chạy, sẽ nhận được kết quả sau đây:
5 == 5 = 1
5 == 4 = 0
5 == 6 = 0
5 != 5 = 0
5 != 4 = 1
5 != 6 = 1
5 > 5 = 0
5 > 4 = 1
5 > 6 = 0
5 < 5 = 0
5 < 4 = 0
5 < 6 = 1
5 >= 5 = 1
5 >= 4 = 1
5 >= 6 = 0
5 <= 5 = 1
5 <= 4 = 0
5 <= 6 = 1
Toán tử luận lý
7. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 7/17
Các toán tử luận lý được sử dụng trong C được liệt kê cụ thể ở bảng sau:
Toán
tử
Mô tả Cú pháp
Ví dụ
a b Kết
quả
&&
Luận lý AND. true khi và chỉ khi các toán
hạng đều là true
a && b
0 0 0
1 0 0
1 1 1
||
Luận lý OR. true khi một trong hai toán
hạng là true
a && b
0 0 0
1 0 1
1 1 1
! Luận lý NOT. true khi toán hạng là false !a
1 0
0 1
Ví dụ sau minh họa cách sử dụng các toán tử trong nhóm toán tử luận lý:
8. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 8/17
#include <stdio.h>
int main()
{
int a = 5;
int b = 5;
int c = 6;
printf("(a > b) && (b > c) = %d n", (a > b) && (b > c));
printf("(a == b) && (a > c) = %d n", (a == b) && (a > c));
printf("(a == b) && (b < c) = %d n", (a == b) && (b < c));
printf("(a > b) || (b > c) = %d n", (a > b) || (b > c));
printf("(a == b) || (a > c) = %d n", (a == b) || (a > c));
printf("(a == b) || (b < c) = %d n", (a == b) || (b < c));
printf("!(a == b) = %d n", !(a == b));
printf("!(b == c) = %d n", !(b == c));
printf("!a = %d n", !a);
return 0;
}
Sau khi biên dịch và chạy, sẽ được kết quả như sau:
9. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 9/17
(a > b) && (b > c) = 0
(a == b) && (a > c) = 0
(a == b) && (b < c) = 1
(a > b) || (b > c) = 0
(a == b) || (a > c) = 1
(a == b) || (b < c) = 1
!(a == b) = 0
!(b == c) = 1
!a = 0
Toán tử bitwise
Các toán tử bitwise làm việc trên bit. Bảng dưới đây mô tả chi tiết các toán
tử bitwise trong C:
Toán
tử
Mô tả
Cú
pháp
Ví dụ
a b Kết quả
~ Bitwise
NOT
~a 0b10100011 0b01011100
& Bitwise
AND
a & b 0b10100011 0b10101101 0b10100001
| Bitwise OR a | b 0b10100011 0b10101101 0b10101111
^ Bitwise
XOR
a ^ b 0b10100011 0b10101101 0b00001110
<< Dịch trái a << b 0b10100011 2 0b10001100
10. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 10/17
>> Dịch phải a >> b 0b10100011 2 0b10100000
Ví dụ sau đây sẽ minh họa cách sử dụng các toán tử trong nhóm toán tử
bitwise:
#include <stdio.h>
int main()
{
unsigned char a = 19; /* 19 = 0b0001 0011 */
unsigned char b = 85; /* 85 = 0b0101 0101 */
char c; /* ----------- */
c = ~a; /*-20 = 0b1110 1100 */
printf("~a = %dn", c );
c = a & b; /* 17 = 0b0001 0001 */
printf("a & b = %dn", c );
c = a | b; /* 87 = 0b0101 0111 */
printf("a | b = %dn", c );
c = a ^ b; /* 70 = 0b0100 0110 */
printf("a ^ b = %dn", c );
c = a << 2; /* 76 = 0b0100 1100 */
printf("a << 2 = %dn", c );
c = a >> 2; /* 4 = 0b0000 0100 */
printf("a << 2 = %dn", c );
return 0;
}
11. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 11/17
Sau khi biên dịch và chạy, sẽ được kết quả như sau:
~a = -20
a & b = 17
a | b = 87
a ^ b = 70
a << 2 = 76
a << 2 = 4
Toán tử gán
Toán tử gán là những toán tử được dùng để gán giá trị cho biến. Bảng sau
liệt kê các toán tử gán được sử dụng trong C:
Toán
tử
Mô tả Cú pháp
Tương
đương với
= Gán [giá trị của] toán hạng bên phải cho
toán hạng bên trái.
a = b a = b
+= Gán tổng toán hạng bên trái và toán
hạng bên phải cho toán hạng bên trái.
a += b a = a + b
-= Gán hiệu toán hạng bên trái và toán
hạng bên phải cho toán hạng bên trái.
a -= b a = a - b
*= Gán tích toán hạng bên trái và toán hạng
bên phải cho toán hạng bên trái.
a *= b a = a * b
/= Gán thương toán hạng bên trái và toán
hạng bên phải cho toán hạng bên trái.
a /= b a = a / b
12. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 12/17
%= Phần dư của phép chia toán hạng bên
trái cho toán hạng bên phải và gán cho
toán hạng bên trái.
a %= b a = a % b
&= Gán kết quả của phép AND bit toán hạng
bên trái và toán hạng bên phải cho toán
hạng bên trái.
a &= b a = a & b
|= Gán kết quả của phép OR bit toán hạng
bên trái và toán hạng bên phải cho toán
hạng bên trái.
a |= b a = a | b
^= Gán kết quả của phép XOR bit toán hạng
bên trái và toán hạng bên phải cho toán
hạng bên trái.
a ^= b a = a ^ b
<<= Gán kết quả của phép dịch bit trái toán
hạng bên trái số toán hạng bên phải lần
cho toán hạng bên trái.
a <<= b a = a << b
>>= Gán kết quả của phép dịch bit phải toán
hạng bên trái số toán hạng bên phải lần
cho toán hạng bên trái.
a >>= b a = a >> b
Ví dụ sau sẽ minh họa cách sử dụng các toán tử trong nhóm toán tử gán:
13. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 13/17
#include <stdio.h>
int main()
{
int a = 5;
int b;
b = a; /* b = 5 */
printf("b = a; b = %dn", b );
b += a; /* b = 10 */
printf("b += a = %dn", b );
b -= a; /* b = 5 */
printf("b -= a; b = %dn", b );
b *= a; /* b = 25 */
printf("b *= a; b = %dn", b );
b /= a; /* b = 5 */
printf("b /= a; b = %dn", b );
b %= a; /* b = 0 */
printf("b %%= a; b = %dn", b );
b = 7; /* 0000 0111 */
b <<= 2; /* b = 28 (0001 1100) */
printf("b <<= 2; b = %dn", b );
b >>= 2; /* b = 7 (0000 0111) */
printf("b >>= 2; b = %dn", b );
b &= 3; /* b = 3 (0000 0011) */
printf("b &= 3; b = %dn", b );
b ^= 2; /* b = 1 (0000 0001) */
printf("b ^= 2; b = %dn", b );
b |= 4; /* b = 5 (0000 0101) */
14. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 14/17
printf("b |= 2; b = %dn", b );
return 0;
}
Sau khi biên dịch và chạy, sẽ được kết quả như sau:
b = a; b = 5
b += a = 10
b -= a; b = 5
b *= a; b = 25
b /= a; b = 5
b %= a; b = 0
b <<= 2; b = 28
b >>= 2; b = 7
b &= 3; b = 3
b ^= 2; b = 1
b |= 2; b = 5
Các toán tử khác
Trong C, ngoài các toán tử đã được đưa ra ở trên, còn một số toán tử quan
trọng khác cũng thường hay được sử dụng:
Toán tử phẩy (comma operator)
Toán tử phẩy được sử dụng để liên kết các biểu thức có liên quan với nhau,
thường được sử dụng nhiều trong khai báo biến, ví dụ:
15. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 15/17
int a, b, c;
Toán tử sizeof
Toán tử này đã được đề cập ở phần trước (/lap-trinh-c-kieu-du-lieu/#toan-
tu-sizeof), được dùng để trả về kích cỡ của dữ liệu (kiểu dữ liệu, biến, hằng
...).
Toán tử ternary (?:)
?: là một toán tử điều kiện, được sử dụng với cú pháp sau:
conditional_expression ? expression_if_true : expression_if_false
trong đó:
conditional_expression là một biểu thức điều kiện
expression_if_true là biểu thức sẽ được đánh giá (evaluated) nếu
biểu thức điều kiện đúng.
expression_if_false là biểu thức sẽ được đánh giá nếu biều thức
điều kiện sai.
Ví dụ sau minh họa cách sử dụng toán tử ?::
16. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 16/17
Bài trước (/lap-trinh-c/cac-ham-nhap-xuat/)
#include <stdio.h>
int main()
{
char week_day;
char opening_time;
printf("Enter a day of the week [1-7]: ");
scanf("%d", &week_day);
/* If the day is Sunday (1) or Saturday (7), the opening time
/* Else, the opening time will be 8:00 a.m. */
opening_time = (week_day == 1 || week_day == 7) ? 13 : 8;
printf("Opening time: %dhn", opening_time);
return 0;
}
Sau khi biên dịch và chạy, sẽ nhận được kết quả sau:
Enter a day of the week [1-7]: 1
Opening time: 13h
Ngoài ra còn một số toán tử khác như *, &, ., ->, [] sẽ được trình bày ở
các bài sau.
Danh sách bài học (/lap-trinh-c/)
17. 4/14/2017 Các toán tử trong C
https://www.laptrinh101.com/lap-trinh-c/cac-toan-tu/ 17/17
Bài sau (/lap-trinh-c/dieu-kien-re-nhanh/)
Cập nhật lần cuối vào 10-04-2017 11:25.