01/10/2018, 00:09

Thứ tự ưu tiên toán tử trong c

mọi người cho em hỏi sao bài thứ nhât kết quả lại là 1 và bài thứ 2 kết quả bằng 13 ạ. em tính không ra

#include <stdio.h>
int main()
{
    double b = 5 & 4 && 2 || 5 | 6;
    printf("%lf", b);
}
#include <stdio.h>
int main()
 {	
 	int a = 3;
     double b = ++a + a++ + --a;
     printf("%lf", b);
 }
Lương Quang Mạnh viết 02:16 ngày 01/10/2018

Về cái đầu tiên, vì &&|| có ưu tiên thấp hơn bitwise operators, nên được thực hiện sau cùng, mà kết quả trả về của logical operators là 1 hoặc 0 (true hoặc false) nên b = 1 là đúng rồi.
Còn cái thứ 2, mình cũng chả hiểu tại sao luôn , cứ nghĩ nó là 12?

pơ phếc viết 02:20 ngày 01/10/2018

Cái thứ hai mình nghĩ là 4+5+4

Trương Minh Giang viết 02:11 ngày 01/10/2018

sao một hồi tìm tòi thì mình phát hiện nó là lỗi undifined behavior

Lương Quang Mạnh viết 02:10 ngày 01/10/2018

Ừ, như thế thì đúng là ra 13 thật, nhưng mà số thứ 2 là tăng sau mà, sau lại là 5?

sao một hồi tìm tòi thì mình phát hiện nó là lỗi undifined behavior

Bạn giải thích cụ thể hơn được không?

Bài liên quan
0