Ví dụ về toán tử 1 ngôi trong C


Kết thúc bài học này, bạn có thể:

  • Hiểu được Toán tử gán
  • Hiểu được biểu thức số học
  • Nắm được toán tử quan hệ [Relational Operators] và toán tử luận lý [Logical Operators]
  • Hiểu toán tử luận lý nhị phân [Bitwise Logical Operators] và biểu thức [Expressions]
  • Hiểu khái niệm ép kiểu
  • Hiểu độ ưu tiên của các toán tử.

Giới thiệu

C có một tập các toán tử phong phú. Toán tử là công cụ dùng để thao tác dữ liệu. Một toán tử là một ký hiệu dùng để đại diện cho một thao tác cụ thể nào đó được thực hiện trên dữ liệu. C định nghĩa bốn loại toán tử: toán tử số học [arithmetic], quan hệ [relational], luận lý [logical], và toán tử luận lý nhị phân [bitwise]. Bên cạnh đó, C còn có một số toán tử đặc biệt.

Toán tử thao tác trên hằng hoặc biến. Hằng hoặc biến này được gọi là toán hạng [operands]. Biến đã được đề cập ở các chương trước. Hằng là những giá trị cố định mà chương trình không thể thay đổi. Hằng trong C có thể là bất cứ kiểu dữ liệu cơ bản nào. Toán tử được phân loại: toán tử một ngôi, hai ngôi hoặc ba ngôi. Toán tử một ngôi chỉ thao tác trên một phần tử dữ liệu, toán tử hai ngôi trên hai phần tử dữ liệu và ba ngôi trên ba phần tử dữ liệu.

Ví dụ 4.1:

c = a + b;
Ở đây a, b, c là những toán hạng, dấu ‘=’ và dấu ‘+’ là những toán tử.

4.1 Biểu thức [Expressions]

Một biểu thức là tổ hợp các toán tử và toán hạng. Toán tử thực hiện các thao tác như cộng, trừ, so sánh v.v… Toán hạng là những biến hay những giá trị mà các phép toán được thực hiện trên nó. Trong ví dụ  a + b, “a” và “b” là toán hạng  và “+” là toán tử. Tất cả kết hợp lại là một biểu thức.

Trong quá trình thực thi chương trình, giá trị thực sự của biến [nếu có] sẽ được sử dụng cùng với các hằng có mặt trong biểu thức. Việc đánh giá biểu thức được thực hiện nhờ các toán tử. Vì vậy, mọi biểu thức trong C  đều có một giá trị.

Các ví dụ về biểu thức là:

2
x 3 + 7

2 × y + 5

2 + 6 × [4 – 2]

z + 3 × [8 – z]

Ví dụ 4.2:

Roland nặng 70 kilograms, và Mark nặng k kilograms. Viết một biểu thức cho tổng cân nặng của họ. Tổng cân nặng của hai người tính bằng kilograms là 70 + k.

Ví dụ 4.3:

Tính giá trị biểu thức 4 × z + 12 với z = 15.

Chúng ta thay thế mọi z với giá trị 15, và đơn giản hóa biểu thức theo quy tắc: thi hành phép toán trong dấu ngoặc trước tiên, kế đến lũy thừa, phép nhân và chia rồi phép cộng và trừ.

4 × z + 12 trở thành 4 × 15 + 12 =                           [phép nhân thực hiện trước phép cộng] 60 + 12 =

72

Toán tử gán [Assignment Operator]

Trước khi nghiên cứu các toán tử khác, ta hãy xét toán tử gán [=]. Ðây là toán tử thông dụng nhất cho mọi ngôn ngữ và mọi người đều biết. Trong C, toán tử gán có thể được dùng cho bất kỳ biểu thức C hợp lệ. Dạng thức chung cho toán tử gán là:
Tên biến = biểu thức;

Gán liên tiếp

Nhiều biến có thể được gán cùng một giá trị trong một câu lệnh đơn. Việc này thực hiện qua cú pháp gán liên tiếp. Ví dụ:

a = b = c =10;

Dòng mã trên gán giá trị 10 cho a, b,c. Tuy nhiên, việc này không thể thực hiện lúc khai báo biến. Ví dụ:

int a = int b = int c= 0;

Câu lệnh trên phát sinh lỗi vì sai cú pháp.

Biểu thức số học [Arithmetic Expressions]

Các phép toán thường được thực hiện theo một thứ tự cụ thể [hoặc riêng biệt] để cho ra giá trị cuối cùng. Thứ tự này gọi là độ ưu tiên [sẽ nói đến sau].

Các biểu thức toán học trong C được biểu diễn bằng cách sử dụng toán tử số học cùng với các toán hạng dạng số và ký tự. Những biểu thức này gọi là biểu thức số học [Arithmetic Expressions]. Ví dụ về biểu thức số học là :

a * [b+c/d]/22; ++i % 7;

5 + [c = 3+8];

Như chúng ta thấy ở trên, toán hạng có thể là hằng, biến hay kết hợp cả hai. Hơn nữa, một biểu thức có thể là sự kết hợp của nhiều biểu thức con. Chẳng hạn, trong biểu thức đầu, c/d là một biểu thức con, và trong biểu thức thứ ba c = 3+8 cũng là một biểu thức con.

4.2 Toán tử quan hệ [Relational Operators]

Toán tử quan hệ được dùng để kiểm tra mối quan hệ giữa hai biến, hay giữa một biến và một hằng. Ví dụ, việc xét số lớn hơn của hai số, a và b, được thực hiện thông qua dấu lớn hơn [>] giữa hai toán hạng ab [a > b].

Trong C, true [đúng] là bất cứ giá trị nào khác không [0], và false [sai] là bất cứ giá trị nào bằng không [0]. Biểu thức dùng toán tử quan hệ trả về 0 cho false1 cho true. Ví dụ biểu thức sau :

a == 14 ;

Biểu thức này kiểm tra xem giá trị của a có bằng 14 hay không. Giá trị của biểu thức sẽ là 0 [false] nếu a có giá trị khác 14 và 1 [true] nếu nó là 14.

Bảng sau mô tả ý nghĩa của các toán tử quan hệ.

4 + 3 được tính tương đương với 5 > [4 + 3], nghĩa là 4+3 sẽ được tính trước và sau đó toán tử quan hệ sẽ được thực hiện. Kết quả sẽ là false, tức là trả về 0.

Câu lệnh sau:

printf[“%d”, 5> 4 + 3]; sẽ cho ra: 0

vì 5 bé hơn [4 + 3] .

4.4 Toán tử luận lý nhị phân [Bitwise Logical Operators] và biểu thức

Ví dụ xét toán hạng có giá trị là 12, toán tử luận lý nhị phân sẽ coi số 12 này như 1100. Toán tử luận lý nhị phân xem xét các toán hạng dưới dạng chuỗi bit chứ không là giá trị số thông thường. Giá trị số có thể thuộc các cơ số: thập phân [decimal], bát phân [octal] hay thập lục phân [hexadecimal]. Riêng toán tử luận lý nhị phân sẽ chuyển đổi toán hạng mà nó thao tác thành biểu diễn nhị phân tương ứng, đó là dãy số 1 hoặc là 0.

Toán tử luận lý nhị phân gồm &, | , ^ , ~ , vv … được tổng kết qua bảng sau:.

Toán tử Ý nghĩa
>  lớn hơn
>= lớn hơn hoặc bằng
Toán tử Mô tả
Bitwise AND

[ x & y]

Mỗi vị trí của bit trả về kết quả là 1 nếu bit tại vị trí tương ứng của hai toán hạng đều là 1.
Bitwise OR

[ x | y]

Mỗi vị trí của bit trả về kết quả là 1 nếu bit tại vị trí tương ứng của một trong hai toán hạng là 1.
Bitwise NOT

[ ~ x]

Ðảo ngược giá trị các bit của toán hạng [1 thành 0 và ngược lại].
 

Bitwise XOR

[ x ^ y]

Mỗi vị trí của bit trả về kết quả là 1 nếu bit tại vị trí tương ứng của một trong hai toán hạng là 1 chứ không phải cả hai cùng là 1.

Bảng 4.3:  Toán tử luận lý nhị phân

Toán tử luận lý nhị phân xem kiểu dữ liệu số như là số nhị phân 32-bit, giá trị số được đổi thành giá trị bit để tính toán trước rồi sau đó sẽ trả về kết quả ở dạng số ban đầu. Ví dụ:

Biểu thức 10 & 15 có nghĩa là [1010 & 1111] trả về giá trị 1010 có nghĩa là 10.

Biểu thức 10 | 15 có nghĩa  là [1010 | 1111] trả về giá trị 1111 có nghĩa là 15.

Biểu thức 10 ^ 15 có nghĩa  là [1010 ^ 1111] trả về giá trị 0101 có nghĩa là 5.

Biểu thức ~10 có nghĩa  là [ ~1010 ] trả về giá trị 1111.1111.1111.1111.1111.1111.1111.0101 có nghĩa là -11.

4.5 Biểu thức dạng hỗn hợp & Chuyển đổi kiểu

Một biểu thức dạng hỗn hợp là một biểu thức mà trong đó các toán hạng của một toán tử thuộc về nhiều kiểu dữ liệu khác nhau. Những toán hạng này thông thường được chuyển về cùng kiểu với toán hạng có kiểu dữ liệu lớn nhất. Điều này được gọi là tăng cấp kiểu. Sự phát triển về kiểu dữ liệu theo thứ tự sau :

char < int 6 OR False]
Kế đến dấu ngoặc đơn ở ngoài được xét đến. Xem lại các bảng nói về thứ tự ưu tiên của các toán tử.

  • 5+9*3^2-4 > 10 AND [2+16-2 > 6 OR False]
  • 5+9*3^2-4 > 10 AND [18-2 > 6 OR False]
  • 5+9*3^2-4 > 10 AND [16 > 6 OR False]
  • 5+9*3^2-4 > 10 AND [True OR False]
  • 5+9*3^2-4 > 10 AND True
  • 5+9*9-4>10 AND True
    Ta tính biểu thức bên trái trước theo các quy tắc
  • 5+81-4>10 AND True
  • 86-4>10 AND True
  • 82>10 AND True
  • True AND True
  • Tóm tắt bài học

    • C định nghĩa bốn loại toán tử: số học, quan hệ [so sánh], luận lý và luận lý nhị phân.
    • Tất cả toán tử trong C được tính toán theo thứ tự độ ưu tiên.
    • Toán tử quan hệ được dùng kiểm tra mối quan hệ giữa hai biến hay giữa một biến và một hằng.
    • Toán tử luận lý là những ký hiệu dùng để kết hợp hay phủ định những biểu thức chứa các toán tử quan hệ.
    • Toán tử luận lý nhị phân xét các toán hạng như là bit nhị phân chứ không phải là các giá trị số thập phân.
    • Phép gán [=] được xem như là một toán tử có tính kết hợp từ phải sang trái.
    • Độ ưu tiên thiết lập sự phân cấp của một tập các toán tử so với tập các toán tử khác khi ước lượng một biểu thức.

    Kiểm tra tiến độ học tập

    1. ______ là những công cụ thao tác dữ liệu.
    A. Những toán tử B. Những toán hạng
    C. Những biểu thức D. Không câu nào đúng
    1. Một ­­­­­_______ bao gồm sự kết hợp của các toán tử và các toán hạng.
    A. Biểu thức B. Hàm
    C. Con trỏ D. Không câu nào đúng
    1. ________ thiết lập sự phân cấp của một tập các toán tử so với tập các toán tử khác khi ước lượng một biểu thức.
    A. Những toán hạng B. Độ ưu tiên
    C. Toán tử D. Không câu nào đúng
    1. ____________ là một biểu thức có  các toán hạng thuộc nhiều kiểu dữ liệu khác nhau.
    A. Biểu thức đơn B. Biểu thức hỗn hợp
    C.  Quyền ưu tiên D. Không câu nào đúng
    1. Một biểu thức được ép thành một kiểu nhất định bằng cách dùng ____.
    A. Ép kiểu B. Quyền ưu tiên
    C. Toán tử D. Không câu nào đúng
    1. _________ được dùng để kết hợp hay phủ định biểu thức chứa các toán tử quan hệ.
    A. Những toán tử luận lý B. Những toán tử luận lý nhị phân
    C. Những toán tử phức D. Không câu nào đúng

    7. Những toán tử luận lý nhị phân là __, ___, __ và __ .

    A. % , ^ , * and @ B. &,|,~ and ^
    C.  !,],& and * D. Không câu nào đúng
    1. Ðộ ưu tiên của các toán tử có thể được thay đổi bằng cách đặt các phần tử được yêu cầu của biểu thức trong _________  .
    A. Dấu ngoặc xoắn [{ }] B. Ký hiệu mũ [ ^]
    C. Những dấu ngoặc đơn [[]] D. Không câu nào đúng

    Bài tập tự làm

    1. Viết một chương trình nhập và cộng ba số.
    2. Viết một chương trình tính giá trị của biểu thức với các giá trị sau:

    z = a*b+[c/d]-e*f ; a = 10 b = 7 c = 15.75 d = 4 e = 2

    f = 5.6

    1. Viết một chương trình tính diện tích và chu vi của hình chữ nhật.
    2. Viết một chương trình tính thể tích của một hình trụ.
    3. Viết một chương trình tính lương thực lãnh của một nhân viên theo công thức dưới đây

    Lương cơ bản : $ 12000 DA : 12% lương cơ bản HRA : $150 TA : $120 Các mục khác : $450 Thuế : PF :14% lương cơ bản   và   IT: 15% lương cơ bản

    Lương thực lãnh = Lương cơ bản + DA + HRA + TA + Các mục khác – [PF + IT]

    Các thẻ: CSShtmllập trình C#ngôn ngữ C

    Video liên quan

    Chủ Đề