Что происходит, когда я преобразовываю интервал для случайной работы?

У целого есть 4 байта, тогда как один char у этого есть только 1 байт.

Когда делают я делаю это определение:

int a = 1000; // 1111101000
char b = (char) a;

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

9
задан 13.11.2019, 15:41
4 ответа

Рассмотрение, что один int есть 32 бита и один char есть 8. В этом преобразовании Вы поймаете только биты 0 7 из его int.

Если это int хранение 1000 это:

0000 0000 0000 0000 0000 0011 1110 1000 // equivale a 1000 em 32 bits
^                                     ^
32                                    0

Преобразование для char Вы будете только иметь:

1110 1000 // equivale a 232 em 8 bits
^       ^
7       0

Скоро, это int что действительно хранит 1000, когда оно преобразовано для char, это поворачивается в 232.

8
ответ дан 19.11.2019, 23:16

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

Я говорю, что с тех пор в памяти, первый байт представляет на самом деле самые значительные наименее значительные данные и последнюю вещь. Принимая во внимание, что узлы, люди, мы делаем противоположность этого.

Пример:

0x12345678 <- representação humana

0x78, 0x56, 0x34, 0x12 <- ordenação dos bytes na memória do computador x86

Как указано для @pmg, есть архитектура, в которой этот порядок адресов обратный к помещенному выше.

4
ответ дан 19.11.2019, 23:16

Сообщение явно стандартной вещи C (я использовал N

6 Языков

6.3 Преобразования

6.3.1 Арифметические операнды

6.3.1.3 Подписанные и неподписанные целые числа

1 то, Когда оценить с целочисленным типом, преобразовано Вы он другой целочисленный тип кроме _Bool, если стоимость может быть представлена новым типом, это неизменно.

2 Иначе, если новый тип не подписан, стоимость преобразована, неоднократно добавляя, или вычитая каждый живет, чем максимальное значение, которое может быть представлено в новом типе, пока стоимость не находится в этом скрипы нового типа.

3 Иначе, новый тип подписан, и стоимость не может быть представлена в нем; или результат определен внедрением или определенный внедрением сигнал, поднят.

Короткий перевод:

1 - Если стоимость будет в состоянии, если представлено в белом типе, он будет.
2 - Они уйдут unsigned это произойдет truncagem битов. (такие как другие ответы говорят).
3 - Они уйдут signed, результат определен внедрением.

Третий момент довольно важен. Если Вы будете собираться преобразовать тот int для одного char у этого могут быть результаты не, ждал из его компилятора. Очень, хотя практически они все делают truncagem битов, Вы не должны предполагать, что это всегда происходит.

Предпочтите новообращенному unsigned int для unsigned char если это возможно.

2
ответ дан 19.11.2019, 23:16

Из чего может произойти в преобразовании int для char это - преобразование, базирующееся в tabela ascii.

Например: inserir a descrição da imagem aqui

-1
ответ дан 19.11.2019, 23:16