[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) —