Konwersje całkowite (zawężenie, poszerzenie), zachowanie niezdefiniowane
Było mi dość trudno znaleźć informacje na ten temat w sposób, który mógłbym łatwo zrozumieć, dlatego proszę o sprawdzenie tego, co znalazłem. Chodzi tylko o konwersję i konwersję.
W przykładach będę się odnosił do:
(signed/unsigned) int bigger;
(signed/unsigned) char smaller;
Obcięcie liczby całkowite. (większe-> mniejsze)
pierwszyściętybigger
naMSB strona do dopasowaniasmaller
rozmiar.druga,konwertować skrócony wynik dopodpisany / niepodpisany w zależności od mniejszego typu.
Jeśli większa wartość jest zbyt duża, aby zmieścić się w mniejszym typie, powoduje to niezdefiniowane zachowanie (popraw mnie). Jednak moja reguła powinna działać na wszystkich komputerach (popraw mnie też), a wyniki powinny być przewidywalne.
Poszerzanie liczby całkowite (mniejsze-> większe)
za)signed char
->signed int
b)signed char
->unsigned int
do)unsigned char
->signed int
re)unsigned char
->unsigned int
Gdzie są nieokreślone / nieokreślone zachowania, o których nie wspomniałem, że mogą pojawić się?