Что именно происходит, когда мы приводим число к числу меньшего размера в C? - PullRequest
1 голос
/ 10 июля 2020

Предположим, у меня есть что-то вроде этого:

unsigned int x = (unsigned int)SomeLong;

Что именно происходит, если SomeLong не помещается в 4 байта? Как выглядит новая схема памяти? Как именно работает приведение числа к числу меньшего размера в C? Что происходит?

1 Ответ

0 голосов
/ 10 июля 2020

Обрезает память. Это показано в этой программе, которая показывает двоичное представление длинного, а затем двоичное представление длинного преобразования к меньшему 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

...