Aktywne Wpisy
Moseva +520
Czy Panu Tomkowi wolno plusa, żeby jak najwięcej osób zobaczyło i mogło wesprzeć? ( ͡° ʖ̯ ͡°)
https://www.siepomaga.pl/tomasz-filoda
#pomagajzwykopem
https://www.siepomaga.pl/tomasz-filoda
#pomagajzwykopem
Zawiera treści 18+
Ta treść została oznaczona jako materiał kontrowersyjny lub dla dorosłych.
std::int32t y = -1;
EXPECTEQ(y, x);
std::uint16t x1 = 65535;
std::int16t y1 = -1;
EXPECTEQ(y1, x1);
Tak to powinno działać?
#cpp
@Malkof: nie da się powiedzieć bez źródła, ale szklana kula mówi, że masz tam niejawną promocję do inta.
Ja pytam czy tak to powinno działać, a nie dlaczego tak się dzieje.
@Malkof: zapytaj autora tego makra
Komentarz usunięty przez autora
operator==
więc nawet kompilator powinien ostrzegać przed porównaniem signed z unsigned... czyli promujemy
int32_t
douint32_t
. Zatem po konwersji-1
powinniśmy mieć największą możliwąx == y
ix1 == 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 dlax1 == y1
robi upcast do 32bitowego rejestru z zachowaniem znaku dlax1 == y1
(movsx
imovzx
), więc docmp
leci00FF
iFFFF
(z dokładnością