1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <stdio.h> int main() { unsigned int x = 100; if (x > -1) { printf("OK. Good."); } else { printf("WTF ???"); } return 0; } |
Giải thích
Trong C/C++ khi so sánh một biến với một literal (giá trị trực tiếp) thì compiler sẽ implicit cast giá trị literal về kiểu của biến. Ở ví dụ trên, -1 sẽ được cast sang kiểu unsigned int (4 bytes), -1 biểu diễn bằng 4 bytes sẽ là 0xffffffff, do compiler coi đây là unsigned int nên khi mang ra để so sánh thì giá trị của nó là UINT_MAX = 4294967295 > 100.
— Phạm Minh Tuấn (Shun) —