[CODE FUN] So sánh 2 biến khác kiểu trong C/C++

Code bên trái in ra “WTF ???” còn bên phải in ra “OK. Good.”
(Compiler GCC hay Visual Studio đều như nhau hết nhé).
Anh em có thể test thử ở các link dưới.


Giải thích

Trong C/C++ khi so sánh 2 biến khác kiểu thì compiler sẽ tự động ép kiểu theo nguyên tắc sau:
– Nếu kiểu dữ liệu của 2 biến có size khác nhau: ép biến có kiểu size nhỏ hơn về kiểu có size lớn hơn.
– Nếu kiểu dữ liệu của 2 biến có size bằng nhau: ép biến kiểu signed thành unsigned.

Như vậy trong code ở ví dụ thì:
– Code bên trái: biến y bị ép sang kiểu uint32_t, -1 ép sang uint32_t sẽ có giá trị là UINT_MAX > 100. Chương trình in ra “WTF ???’
– Code bên phải: do uint32_t là 4 bytes, int64_t là 8 bytes nên biến x bị ép sang kiểu int64_t. x = 100 thì ép sang kiểu int64_t vẫn là 100, y vẫn là -1 nên x > y. Chương trình in ra “OK. Good.’

— Phạm Minh Tuấn (Shun) —