Aktywne Wpisy
Nieszkodnik +1322
Van-der-Ledre +148
Ale tu się syf zrobił informacyjny na tym tagu. Ogrom trolli, dezinformacja, podejrzane zielonki. Nie można się już stąd niczego godnego zaufania dowiedzieć. Dlatego przypomnę. Obojętnie czy lubimy, czy nie lubimy Ukraińców, w naszym zasranym interesie jest to, by oni wygrali. To jest wojna cywilizacji, dziczy z zachodem. Jeśli Ukraina padnie, my będziemy następni w kolejce, co zrujnuje naszą obecną rzeczywistość. Wojna pokazała, jak słaba jest Rosja, jakim pośmiewiskiem jest jej armia,
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ą