Wpis z mikrobloga

@lionbest: nawet jeżeli stosuje zwykły operator porównania, to nie jestem do końca pewien, czy to UB. Jeżeli dobrze rozumiem, to wg cppreference mamy przypadek:

If the unsigned type has conversion rank greater than or equal to the rank of the signed type, then the operand with the signed type is implicitly converted to the unsigned type

.. czyli promujemy int32_t do uint32_t. Zatem po konwersji -1 powinniśmy mieć największą możliwą
@Malkof: to nie problem z gtestem. odpal sobie x == y i x1 == y1 i zobaczysz, że dają różne wyniki.

a tutaj dlaczego. ja sprawdzałem z gcc 12.2 na wandboxie.
przy x == y odpala cmp na 32bitowych rejestrach, a dla x1 == y1 robi upcast do 32bitowego rejestru z zachowaniem znaku dla x1 == y1 (movsx i movzx), więc do cmp leci 00FF i FFFF (z dokładnością
Pobierz
źródło: comment_1666965652HaiqqXEZe4qjKXtpFlrSos.jpg