Скажем, у меня есть следующие строки кода:Как работает явное литье в C?
int a; // 4-byte-integer
char b, c, d, e;
b = (char)(a >> 24);
c = (char)(a >> 16);
d = (char)(a >> 8);
e = (char)a;
Давайте также предположим, что система хранения байтов в режиме прямой порядок байтов и a = 100
.
При использовании явного приведения в порядок, исчезают ли самые левые байты? Я предполагаю, что после выполнения вышеуказанных строк переменные будут содержать эти значения: b=100, c=0, d=0, e=0
. Это правильно?
Если вы не используете переменные 'unsigned', это вызовет' undefined behaviour'. Тогда наиболее значительная часть будет усечена. В этом примере утверждение не имеет значения. –
Dup of http://stackoverflow.com/questions/6752567/casting-a-large-number-type-to-a-smaller-type? – Turn
@WeatherVane - это неопределенное поведение или непредвиденное поведение? Поведение знакового бита детерминировано. – nicomp