01/10/2018, 14:24

Ưu tiên toán tử trong c

ai thích giúp em: vì sao toán tử ++ (hậu tố) có độ ưu tiên cao hơn ++ (tiền tố) nhưng khi tính:
a=++b; và a=b++; thì lại khác nhau? ai giải thích cơ chế tính toán trong 2 câu lệnh ý giúp e với ạ?
em cám ơn ạ.

rogp10 viết 16:34 ngày 01/10/2018

Đó là hai câu lệnh khác nhau mà

++b trả về b sau khi tăng b lên 1.
b++ trả về giá trị của b trước khi tăng và tăng b lên 1.

Chi tiết hơn: ++b là lvalue còn b++ là rvalue.

Khoa NTA viết 16:40 ngày 01/10/2018

Hai vế câu hỏi của bạn chẳng ăn nhập gì nhau cả độ ưu tiên của toán tử trong C thì do C quy định, thắc mắc thì bạn đi mà hỏi ông Dennis Ritchie ấy. Còn cơ chế tính toán thì anh @rogp10 đã nói rồi nhé.

Nếu bạn vẫn “tại sao” thì có thể hiểu như vầy: độ ưu tiên chỉ liên quan tới việc thực thi cái toán tử nào trước thôi, còn toán tử nó làm chuyện gì thì cái độ ưu tiên không quan tâm, miễn nó làm xong việc để các toán tử khác làm tiếp. Toán tử sẽ thực hiện theo cơ chế của nó, vậy thôi. Quan trọng là học THẬT KỸ vì C còn nhiều thứ dễ gây nhầm lẫn khác.

Thân Hoàng viết 16:30 ngày 01/10/2018

Cái này là ngôn ngữ nó quy định bạn ạ.
Cũng như tại sao in ra màn hình là printf chứ không phải print ?
Nên cái gì thuộc về cú pháp quy định, quy ước thì k cần thắc mắc

rogp10 viết 16:36 ngày 01/10/2018

Thực ra độ ưu tiên chỉ quy định cách đặt dấu ngoặc ngầm định, chứ không phải tính trước tính sau đâu. C/C++ phần này phải nói rõ như vậy.

Tức là:
a + b * c nghĩa là a + (b * c)
x = y = z nghĩa là x = (y = z)
a | b & c nghĩa là a | (b & c)
và *p+++q nghĩa là *(p++) + q.

Nguyễn Đức Hoàng viết 16:34 ngày 01/10/2018

Bạn không phải lăn tăn mấy cái này chỉ cần hiểu cơ chế hoạt động là được bạn ah. Nó tính kiểu gì thì là do người thiết kế ra ngôn ngữ, Người ta có thể thiết kế ngược lại cũng đc ko sao cả. Người sử dụng chỉ cần hiểu bản chất và áp dụng thôi bạn ah.

Bài liên quan
0