[CODE FUN] So sánh biến unsigned với literal số âm trong C/C++

Kết quả chạy chương trình bên dưới là in ra: “WTF ???”
Ai giải thích được giơ tay nào ?

 


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