Целочисленные преобразования (сужение, расширение), неопределенное поведение

Мне было довольно трудно найти информацию по этому вопросу таким образом, чтобы я мог легко понять, поэтому яЯ прошу пересмотреть то, что я нашел.Все о преобразовании и преобразовании только.

В примерах я буду ссылаться на:

(signed/unsigned) int bigger;
(signed/unsigned) char smaller;

Усечение целые числа. (Bigger->меньше)

первыйусекать bigger наMSB сторона, чтобы соответствоватьsmaller размер.

во-вторых,перерабатывать усеченный результат доподпись / без знака в зависимости от меньшего типа.



Если большее значение слишком велико, чтобы поместиться в меньший тип, это приводит к неопределенному поведению (поправьте меня в этом). Однако мое правило должно работать на всех машинах (поправьте и меня тоже), и результаты должны быть предсказуемы.

Расширяя целые числа (меньше->больше)

а) ->signed char signed int

добавьте меньше с MSB (1 или 0), чтобы соответствовать большему размерупреобразовать в подписанный

б) ->signed char unsigned int

добавьте меньше с MSB (1 или 0), чтобы соответствовать большему размеру.преобразовать в без знака



в) ->unsigned char signed int

добавить с 0 's, чтобы соответствовать большему размерупреобразовать в подписанный

г) ->unsigned char unsigned int

добавить с 0 's, чтобы соответствовать большему размерупреобразовать в без знака

Где неопределенные / неуказанные поведения, которые я не сделал упомянуть, что может всплыть?

Ответы на вопрос(2)

Ваш ответ на вопрос