Thắc mắc toán tử condition ? :

Em cho k < n.
Mà sao output của em lại như này ạ.
image

int main () {
   IOS;
   int n = 9;
   int k = 3;
   int c = 0;
   k < n? c = 3, n = 8, k = 5:c = 99932,n = 99999, k = 23442;
   debug3(c,n,k);
   return 0;
}
}

Bởi vậy mà nhiều khi người ta dùng cặp ngoặc đơn đấy bạn.

k < n? (c = 3, n = 8, k = 5):(c = 99932,n = 99999, k = 23442); // 1
k < n? (c = 3, n = 8, k = 5):(c = 99932),n = 99999, k = 23442; // 2

Bạn nghĩ 1 và 2 khác nhau không?

2 Likes

Comma operator , là thấp nhất nên tính sau. Vì vậy n, k sẽ bị gán lại.

3 Likes

Theo như mấy anh chỉ thì cái ở trên là nó được các giá trị c,n,k sẽ biến đổi như lệnh if else luôn còn cái ở dưới là n,k lại bị gán lại do dấu phẩy thuộc cấp thấp như anh rogp10 nói, nhưng mà em còn chưa hiểu cấp thấp là như nào lắm

Để cho dễ hình dung: Do nhân chia ưu tiên hơn cộng trừ nên bỏ ngoặc đơn như sau:

2+(3*5)+7

(4*6)+(8*3)

Trở lại vd ban đầu, do toán tử , là thấp nhất, nên sau khi bỏ ngoặc đầy đủ sẽ trở thành:

(k < n? ((c = 3), (n = 8), (k = 5)):(c = 99932)), (n = 99999), (k = 23442);
4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?