Xin chào và chào mừng. Bây giờ chúng ta đã nói về tất cả
các toán tử chính, những toán tử cơ bản, những toán tử kỳ lạ, chúng ta phải
nói về khái niệm nhỏ về mức độ ưu tiên của toán tử này.
Vì vậy, điều này về cơ bản phát huy tác dụng khi bạn đánh giá thứ tự của các toán tử này như thế nào.
Vì vậy, quyền ưu tiên của toán tử xác định nhóm các thuật ngữ và biểu thức và
quyết định cách một biểu thức được đánh giá.
Bây giờ bạn thực sự không cần phải hiểu bất kỳ điều gì
trong số này nếu bạn sử dụng dấu ngoặc đơn mà chúng ta sẽ đến sau một giây, nhưng bạn phải hiểu
khái niệm này vì nó là một phần của ngôn ngữ, nó là một phần của việc hiểu ngôn ngữ.
Vì vậy, quyền ưu tiên sẽ quyết định thứ tự đánh giá khi hai
toán tử chia sẻ một toán hạng.
Và điều này sẽ trở nên rõ ràng với một ví dụ.
Vì vậy, ví dụ, toán tử nhân có mức độ ưu tiên cao hơn
toán tử bổ sung.
Các toán tử nhất định sẽ có các thứ tự đánh giá khác nhau. Vì vậy, nếu bạn thực hiện một câu lệnh
ghép trong đó bạn
đang thực hiện nhiều phép tính khác nhau, ví dụ: 7 cộng với 3 nhân 2.
Điều này có thể có nhiều kết
quả, phép cộng và bạn đang thực hiện phép nhân.
Bạn cần hiểu tôi cần thực hiện phép cộng trước hay tôi nên thực hiện phép nhân trước vì tùy thuộc vào
việc bạn làm trước mà kết quả sẽ thay đổi.
Vì vậy, ví dụ, x này bằng 7 cộng với 3 nhân 2,
kết quả có thể là 13 hoặc 20 tùy thuộc vào thứ
tự khi bạn đánh giá mỗi toán hạng.
Vì vậy, thứ tự thực hiện các hoạt động khác nhau có thể tạo ra sự khác biệt rất lớn.
Và đây là lý do tại sao bạn cần phải hiểu về quyền ưu tiên.
C cung cấp các quy tắc cụ thể để chọn việc cần làm trước.
Trong trường hợp này, tôi có thực hiện phép nhân cộng. Chà, c sẽ nói cho bạn biết chuyện gì sắp xảy ra.
Lý tưởng nhất là nếu bạn đặt chúng trong ngoặc đơn, bạn sẽ cho nó biết phải làm gì,
bạn sẽ đưa ra quyết định đó. Nhưng nếu bạn không đặt nó trong dấu ngoặc đơn,
ngôn ngữ lập trình sẽ đưa ra quyết định cho bạn.
Vì vậy, trong c, phép nhân sẽ có mức độ ưu tiên cao
hơn so với toán tử cộng. Vì vậy, những gì sắp xảy ra là kết quả sẽ là 13.
Bây giờ bạn có thể nói 7 cộng với 3, là 10 và
sau đó nhân với 2, kết quả sẽ là 20.
Hoặc bạn có thể thực hiện 7 cộng với 3 nhân 2, được 7 cộng với 6 được 13.
Vì vậy, đó là cách bạn có thể có các giá trị khác nhau.
Thật mơ hồ. Bạn làm phép cộng trước hay bạn làm phép nhân trước.
May mắn thay, một lần nữa, điều đó được quyết định bởi ngôn ngữ. Nhưng bạn có thể thấy làm thế nào có hai kết quả khác nhau.
7 cộng với 3 lần 2
hoặc 7 cộng với 3 lần 2. Bạn thấy sự tạm dừng ở đó.
Bây giờ c sẽ làm phần sau. Nó sẽ thực hiện phép nhân trước vì điều đó
có mức độ ưu tiên cao hơn.
Vì vậy, nó sẽ làm 3 lần 2, là 6 và sau đó sẽ thêm vào 7.
Vì vậy, kết quả x sẽ là 13 vì dấu sao có mức
độ ưu tiên cao hơn so với phép cộng.
Và do đó, có các quy tắc cho mọi toán tử đơn lẻ,
toán tử nào được ưu tiên hơn toán tử kia.
Có một mức độ ưu tiên.
Và phép nhân và phép chia có mức độ ưu tiên cao hơn phép cộng và phép trừ.
Vì vậy, đó là chúng được thực hiện trước, chẳng hạn.
Bạn có thể tránh tất cả các ưu tiên này và để ngôn ngữ quyết định
cho bạn nếu bạn cung cấp dấu ngoặc đơn.
Dấu ngoặc đơn sẽ luôn nhóm các biểu thức
ở mức ưu tiên cao nhất. Vì vậy, nếu tôi nói 7 cộng với 3 và tôi đặt nó trong dấu
ngoặc đơn, thì nó sẽ luôn thực hiện phép cộng trước.
Nếu tôi nói 3
lần 2 và tôi đặt nó trong dấu ngoặc đơn,
nó sẽ luôn thực hiện phép nhân và sau đó thêm bất cứ thứ gì bên ngoài dấu ngoặc đơn.
Vì vậy, bạn thực sự chỉ nên sử dụng dấu ngoặc đơn. Luôn sử dụng dấu ngoặc đơn.
Nếu không, ngôn ngữ sẽ quyết định cho bạn. Bạn phải ghi nhớ tất cả các cấp độ
ưu tiên mà điều này rất khó thực hiện như tôi sẽ chỉ cho bạn trong bảng tiếp theo.
Có rất nhiều toán tử khác nhau và bạn phải biết ưu tiên
cho tất cả các toán tử khác nhau này.
Vì vậy, nó có thể trở nên rất khó hiểu.
Điều này tương tự như bạn biết hoặc bạn để ngôn ngữ thực hiện chuyển đổi ngầm cho bạn hoặc bạn
thực hiện chuyển đổi rõ ràng với toán tử ép kiểu, cùng một loại ý tưởng
ở đây, chỉ cần sử dụng dấu ngoặc đơn.
Vì vậy, nếu chúng ta nhìn vào bảng này, chúng ta sẽ xem xét lần thứ hai, tôi đoán vì trước
tiên tôi muốn nói về thuyết kết hợp.
Sự liên kết có liên quan đến mức độ ưu tiên vì điều gì sẽ xảy
ra nếu hai toán tử có cùng mức độ ưu tiên. Sau đó, làm thế nào để bạn tìm ra thứ tự.
Vậy thì bạn áp dụng thuyết liên kết. Vì vậy, bất cứ khi nào các
toán tử có cùng mức ưu tiên, thì bạn áp dụng các quy tắc bổ sung.
Vì vậy, sự kết hợp về cơ bản là bạn có bắt đầu
ở phía bên trái và đi sang bên phải hay bên phải sang bên trái hay không.
Vì vậy, nếu bạn chia sẻ một toán hạng và cả hai đều được thực thi
theo cùng một thứ tự, bạn sẽ thực thi chúng theo thứ tự của câu
lệnh dựa trên quy tắc kết hợp. Vì vậy, đối với hầu hết các nhà
khai thác, thứ tự là từ trái sang phải. Vì vậy, hãy để tôi cho bạn thấy một ví dụ.
Nếu bạn nói 1 bằng với 2 không bằng 3, thì các toán
tử bằng bằng và các toán tử không bằng bằng dấu chấm
than có cùng mức độ ưu tiên.
Vì vậy, trong trường hợp này chúng tôi có một sự mơ hồ. Chúng ta có một vấn đề.
Chúng tôi không biết phải đánh giá điều gì đầu tiên. Chúng tôi không biết liệu chúng tôi cần thực hiện
1 bằng 2 hay 2 không
bằng 3 và điều đó quan trọng bởi vì bạn đang thực hiện một biểu thức Boolean.
Đây là một biểu thức boolean ở đây, vì vậy nó trở về true hoặc false.
Vì vậy, những gì bạn sẽ làm ở đây là bạn sẽ áp dụng thuyết liên kết.
Tính kết hợp của cả giá trị bằng bằng và không bằng là từ trái sang phải.
Đầu tiên bạn sẽ làm 1 bằng 2, điều đó sẽ sai.
Và sau đó bạn sẽ nói sai,
không bằng 3,
mà không phải là sai. Vậy 1 bằng 2
và sau đó không bằng 3.
Vì vậy, kết quả sẽ là sai. Vì vậy, biểu thức bên trái được thực hiện đầu
tiên và di chuyển về phía bên phải.
Vì vậy, cách bạn muốn nghĩ về điều đó về cơ bản là nó bằng những dấu ngoặc đơn này.
Đầu tiên, bạn sẽ đánh giá một là bằng 2.
Và sau đó nếu điều đó đánh giá đúng hay sai, thì bạn sẽ nói rằng giá trị đó bằng 3.
Và điều này gây nhầm lẫn vì nó
không có giá trị đúng hoặc sai.
Nhưng 1 bằng = hãy nhớ đó là toán tử so sánh, đó không phải là toán tử gán.
Và chúng tôi không sử dụng các biến ở đây, vì vậy nó thậm chí còn khó hiểu hơn.
Nhưng nếu bạn đặt những con số
này trong các biến, bạn sẽ chỉ nói như, nếu x bằng với y, vì vậy nếu
x là 1 và y là 2, điều đó sẽ đánh giá là 2 sai.
Bởi vì cả hai đều không bằng nhau. Và sau đó nếu 3
là một biến khác z
bằng 3, bạn sẽ nói x bằng y là sai,
z bằng 3. Vì vậy,
false không bằng 3. Vì vậy, nó sẽ là sai.
Vì vậy, 1 bằng bằng 2 lần thực hiện đầu tiên, kết quả lại là 0 false.
Khi đó 0 không bằng 3, thực thi dẫn đến 1 đúng.
Vì vậy, tôi đã nói ban đầu là sai, nhưng rõ ràng là 0 không bằng 3, mà toàn
bộ sự việc sẽ được đánh giá là sai.
Toàn bộ điều sẽ đánh giá là đúng, tôi xin lỗi vì 0 không bằng 3.
Vì vậy, 0 không bằng 3 Tôi đã nói nó sai vì chúng không bằng, nhưng điều đó có
nghĩa là nó thực sự được đánh giá là đúng.
Vì vậy, khá gọn gàng ở đó. Bây giờ đây là bảng của chúng tôi cho biết
tất cả các quy tắc ưu tiên và liên kết và rất khó để ghi nhớ điều này.
Vì vậy, một lần nữa, bạn làm gì, sử dụng dấu ngoặc đơn.
Nhưng đây là bảng. Mức ưu tiên cao nhất nằm trên
cùng, vì vậy các toán tử postfix có mức ưu tiên cao nhất.
Và nếu bạn đang sử dụng bất kỳ cái nào trong cùng một biểu thức, thì bạn
đọc từ trái sang phải.
Vì vậy, các toán tử postfix, những thứ như
dấu ngoặc đơn được ưu tiên cao nhất.
Vì vậy, mỗi khi bạn đưa nội dung nào đó vào trong ngoặc đơn, điều đó sẽ có hiệu lực.
Nhưng bạn có các dấu ngoặc và sau đó bạn
có các toán tử postfix. Chúng tôi chưa nói về
một vài công cụ con trỏ, dấu gạch ngang này lớn hơn, nhưng
bây giờ chúng tôi biết về cộng và
trừ trừ là những hậu tố
có mức độ ưu tiên cao nhất. Toán tử một ngôi những thứ như cộng trừ,
dấu chấm than cho không, dấu ngã cho bitwise, cộng cộng trừ trừ và
sau đó toán tử ép kiểu được gọi là toán tử một ngôi vì nó chỉ có một toán hạng.
Và sau đó toán tử dấu hoa thị là toán tử con trỏ. Dấu và là bitwise và kích
thước của nó.
Những người có quyền ưu tiên cao nhất tiếp theo.
Nhưng ở đây bạn thực sự đang đọc từ phải sang
trái để đánh giá nếu bạn có hai câu lệnh trạng thái trên cùng một dòng.
Và sau đó một lần nữa chúng tôi chỉ đi theo đơn đặt hàng. Bạn phải biết thứ tự này và ghi nhớ nó. Rất khó để làm, nhưng tôi
muốn cho bạn thấy nó, chỉ muốn có một hình
minh họa nhỏ để hiển thị một số bảng. Có rất nhiều nhà khai thác.
Và do đó, có rất nhiều mức hiện tại, và có sự liên kết đối với hầu hết các phần như chúng ta
đã nói trước đó là từ trái sang phải.
Bạn chỉ có liên kết bên phải bên trái cho các toán tử một ngôi.
Vì vậy, các toán tử bitwise đi theo hướng dưới cùng, tất
cả từ trái sang phải. Toán tử bậc ba có điều kiện từ phải sang trái.
Các toán tử gán luôn ở dưới cùng. Điều đó luôn được đánh giá cuối cùng.
Và sau đó nếu chúng bằng nhau, những cái khác trên đó bạn đánh giá từ phải sang trái.
Và sau đó dấu phẩy cũng được gọi là một toán tử. Đó là từ trái sang phải.
Một khái niệm khác mặc dù mức độ ưu tiên và tính
liên kết mà chúng tôi sẽ không thực sự giải
quyết với những ví dụ khác này. Chúng ta sẽ luôn sử dụng dấu
ngoặc đơn và đó là những gì bạn muốn làm.
Nhưng một lần nữa, nếu bạn muốn hiểu đầy đủ về ngôn ngữ, bạn muốn hiểu những khái niệm này, đó là lý do tại sao tôi nói nó với bạn.
Không ai thực sự có thể khẳng định họ biết ngôn ngữ nếu họ không biết một số chi tiết như thế này.
Nhưng hãy sử dụng dấu ngoặc đơn nhiều nhất có thể. Cảm ơn bạn.