Thứ tự u tiên các phép toán

Một phần của tài liệu Bài giảng môn kỹ thuật lập trình C# potx (Trang 25 - 30)

- Phép toá n% trả về phầ nd của phép chia 2.6.2 Phép toán quan hệ

2.6.5Thứ tự u tiên các phép toán

Trỡnh biờn dịch phải xỏc định thứ tự thực hiện cỏc toỏn tử trong trường hợp một biểu thức cú nhiều phộp toỏn, giả sử, cú biểu thức sau:

Biểu thức trờn cú ba phộp toỏn để thực hiện bao gồm (=, +,*). Ta thử xột cỏc phộp toỏn theo thứ tự từ trỏi sang phải, đầu tiờn là gỏn giỏ trị 5 cho biến var1, sau đú cộng 7 vào 5 là 12 cuối cựng là nhõn với 3, kết quả trả về là 36, điều này thật sự cú vấn đề, khụng đỳng với mục đớch yờu cầu của chỳng ta. Do vậy việc xõy dựng một trỡnh tự xử lý cỏc toỏn tử là hết sức cần thiết.

Cỏc luật về độ ưu tiờn xử lý sẽ bảo trỡnh biờn dịch biết được toỏn tử nào được thực hiện trước trong biểu thức.Tương tự như trong phộp toỏn đại số thỡ phộp nhõn cú độ ưu tiờn thực hiện trước phộp toỏn cộng, do vậy 5+7*3 cho kết quả là 26 đỳng hơn kết quả 36. Và cả hai phộp toỏn cộng và phộp toỏn nhõn điều cú độ ưu tiờn cao hơn phộp gỏn. Như vậy trỡnh biờn dịch sẽ thực hiện cỏc phộp toỏn rồi sau đú thực hiện phộp gỏn ở bước cuối cựng. Kết quả đỳng của cõu lệnh trờn là biến var1 sẽ nhận giỏ trị là 26.

Trong ngụn ngữ C#, dấu ngoặc được sử dụng để thay đổi thứ tự xử lý, điều này cũng giống trong tớnh toỏn đại số. Khi đú muốn kết quả 36 cho biến var1 cú thể viết:

var1 = (5+7) * 3;

Biểu thức trong ngoặc sẽ được xử lý trước và sau khi cú kết quả là 12 thỡ phộp nhõn được thực hiện.

Cỏc phộp toỏn được liệt kờ cựng loại sẽ cú thứ tự theo mục thứ thự của bảng: thứ tự trỏi tức là độ ưu tiờn của cỏc phộp toỏn từ bờn trỏi sang, thứ tự phải thỡ cỏc phộp toỏn cú độ ưu tiờn từ bờn phải qua trỏi. Cỏc toỏn tử khỏc loại thỡ cú độ ưu tiờn từ trờn xuống dưới, do vậy cỏc toỏn tử loại cơ bản sẽ cú độ ưu tiờn cao nhất và phộp toỏn gỏn sẽ cú độ ưu tiờn thấp nhất trong cỏc toỏn tử.

2.7 Biểu thức

2.7.1 Biểu thức số học

Biểu thức số học đú là sự kết hợp giữa cỏc toỏn hạng với cỏc toỏn tử số học và cho ta kết quả là một số(số thực hoặc số nguyờn)

Vớ dụ: (3+5)*6/4-2.4 2.7.8 Biểu thức logic

Biểu thức logic đú là sự kết hợp giữa cỏc toỏn hạng với cỏc toỏn tử(toỏn tử số học, toỏn tử quan hệ, toỏn tử logic) v à kết quả cho ta là một giỏ trị logic. Biểu thức logic được dựng làm điều kiện trong cỏc cấu trỳc điều khiển(if, while,....) và một số trường hợp khỏc.

Vớ dụ: (1>=2)&&(5==4) 2.7.9 Biểu thức điều kiện

Hầu hết cỏc toỏn tử đũi hỏi cú một toỏn hạng như toỏn tử (++, --) hay hai toỏn hạng như (+,-,*,/,...). Tuy nhiờn, C# cũn cung cấp thờm một toỏn tử cú ba toỏn hạng (?:). Toỏn tử này cú cỳ phỏp sử dụng như sau:

<Biểu thức điều kiện > ? <Biểu thức thứ 1> : <Biểu thức thứ 2>

Toỏn tử này sẽ xỏc định giỏ trị của một biểu thức điều kiện, và biểu thức điều kiện này phải trả về một giỏ trị kiểu bool. Khi điều kiện đỳng thỡ <biểu thức thứ 1> sẽ được thực hiện, cũn ngược lại điều kiện sai thỡ <biểu thức thứ 2> sẽ được thực hiện. Cú thể diễn giải theo ngụn ngữ tự nhiờn thỡ toỏn tử này cú ý nghĩa : “Nếu điều kiện đỳng thỡ làm cụng việc thứ nhất, cũn ngược lại điều kiện sai thỡ

làm cụng việc thứ hai”. Cỏch sử dụng toỏn tử ba ngụi này được

minh họa trong vớ dụ sau.

Vớ dụ: Sử dụng toỏn tử bao ngụi.

--- using System;

class Tester {

public static void Main() {

int value2; int maxValue; value1 = 10; value2 = 20;

maxValue = value1 > value2 ? value1 : value2;

Console.WriteLine(“Gia tri thu nhat {0}, gia tri thu hai {1}, gia tri lon nhat {2}”, value1, value2, maxValue);

} }

--- Kết quả:

Gia tri thu nhat 10, gia tri thu hai 20, gia tri lon nhat 20 ---

Trong vớ dụ minh họa trờn toỏn tử ba ngụi được sử dụng để kiểm tra xem giỏ trị của value1 cú lớn hơn giỏ trị của value2, nếu đỳng thỡ trả về giỏ trị của value1, tức là gỏn giỏ trị value1 cho biến maxValue, cũn ngược lại thỡ gỏn giỏ trị value2 cho biến maxValue.

2.7.10 Biểu thức gán

Trong C# dựng dấu “=” làm dấu phộp gỏn. Biểu thức gỏn cú thể được thể hiện dưới cỏc dạng như sau: (adsbygoogle = window.adsbygoogle || []).push({});

Biến = Biểu_thức Biến op = Biểu_thức

Cỏ ch viết dưới tương đương Biến = (biến) op (Biểu_thức) trong đú op là một toỏn tử nào đú. Giỏ trị của Biểu_thức sẽ được gỏn cho biến sau cõu lệnh này

Vớ dụ: x + = y tương đương với x = x+y

Nếu ta thờm dấu ; vào sau biểu thức gỏn sẽ thu được một cõu lệnh gỏn Biểu thức gỏn cú thể được sử dụng trong cỏc phộp toỏn và cỏc cõu lệnh như cỏc biểu thức thụng thường. Chẳng hạn khi viết: a=b=5; thỡ điều đú cú nghĩa rằng gỏn giỏ trị của biểu thức b=5 cho biến a. Kết quả là b=5 và a=5. Tương tự sau cõu lệnh: x = (a=5) * (b=10); sẽ gỏn 5 cho a, 10 cho b và sau đú gỏn tiếp 50 cho x

2.7.11 Biểu thức ép kiểu

Những đối tượng của một kiểu dữ liệu này cú thể được chuyển sang những đối tượng của một kiểu dữ liệu khỏc thụng qua cơ chế chuyển đổi tường minh hay ngầm định. Chuyển đổi nhầm định được thực hiện một cỏch tự động,

trỡnh biờn dịch sẽ thực hiện cụng việc này. Cũn chuyển đổi tường minh diễn ra khi chỳng ta gỏn ộp một giỏ trị cho kiểu dữ liệu khỏc.

Việc chuyển đổi giỏ trị ngầm định được thực hiện một cỏch tự động và đảm bảo là khụng mất thụng tin và tuõn theo quy tắc sau:

Vớ dụ, chỳng ta cú thể gỏn ngầm định một số kiểu short (2 byte) vào một số kiểu int (4 byte) một cỏch ngầm định. Sau khi gỏn hoàn toàn khụng mất dữ liệu vỡ bất cứ giỏ trị nào của short cũng thuộc về int:

short x = 10;

int y = x; // chuyển đổi ngầm định

Tuy nhiờn, nếu chỳng ta thực hiện chuyển đổi ngược lại, chắc chắn chỳng ta sẽ bị mất thụng tin. Nếu giỏ trị của số nguyờn đú lớn hơn 32.767 thỡ nú sẽ bị cắt khi chuyển đổi. Trỡnh biờn dịch sẽ khụng thực hiện việc chuyển đổi ngầm định từ số kiểu int sang số kiểu short:

short x; int y = 100;

x = y; // Khụng biờn dịch, lỗi !!!

khụng bị lỗi chỳng ta phải dựng lệnh gỏn tường minh, đoạn mó trờn được viết lại short x;

int y = 100;

x = (short) y; // ẫp kiểu tường minh, trỡnh biờn dịch khụng bỏo lỗi

Trong một biểu thức mà cú nhiều kiểu dữ liệu khỏc nhau, trước khi tớnh toỏn mỏy sẽ chuyển từ kiểu thõp hơn lờn kiểu cao hơn theo sơ đồ như ở trờn.

Vớ dụ:

short x=1,y;

y=4-x; /*Khi biờn dịch sẽ bị lỗi, vỡ 4-x sẽ cho kiểu int và khụng thể gỏn cho biến kiểu short*/

Nếu ta viết

y=(short)(4-y);/* Khi biờn dịch sẽ khụng bị lỗi, vỡ 4-x cho ta kiểu int và sau đú được chuyển thành kiểu short*/

Vỡ vậy biểu thức ộp kiểu tường minh là: (kiểu dữ liệu)Biểu thức

Chỳ ý: Khi ộp kiểu thỡ bản thõn biểu thức khụng bị thay đối kiểu mà chỉ cú giỏ

trị của biểu thức ộp kiểu mới thay đổi

byte short

char

(adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Bài giảng môn kỹ thuật lập trình C# potx (Trang 25 - 30)