Обрезает память. Это показано в этой программе, которая показывает двоичное представление длинного, а затем двоичное представление длинного преобразования к меньшему int:
#include <stdio.h>
void Print8Byte(unsigned long Value) {
for (unsigned char i = 0; i < 64; i++) {
union {
unsigned long Value;
unsigned First:1;
} Cast = {.Value = Value>>i};
putchar('0'+Cast.First);
}
putchar('\n');
}
int main(int argc, char *argv[]) {
unsigned long Num = 0x284884848; //Arbitrary Value
Print8Byte(Num);
Print8Byte((unsigned int)Num);
}
Результат:
0001001000010010000100010010000101000000000000000000000000000000 00010010000100100001000100100100000000000000000000000000000000