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ęty bigger 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

przedrostek mniejszy z MSB (1 lub 0), aby dopasować większy rozmiarprzekonwertować do podpisanego

b)signed char ->unsigned int

przedrostek mniejszy z MSB (1 lub 0), aby dopasować większy rozmiar.przekonwertować na niepodpisany

do)unsigned char ->signed int

uzupełnij o 0, aby dopasować większy rozmiarprzekonwertować do podpisanego

re)unsigned char ->unsigned int

uzupełnij o 0, aby dopasować większy rozmiarprzekonwertować na niepodpisany

Gdzie są nieokreślone / nieokreślone zachowania, o których nie wspomniałem, że mogą pojawić się?

questionAnswers(2)

yourAnswerToTheQuestion