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);
 }

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 :sob:, cứ nghĩ nó là 12?

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

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

Ừ, 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?

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

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?