Какие типы байтов используются при создании типа для символа в Си? - PullRequest
2 голосов
/ 06 февраля 2011

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

взять самый значимый байт?

Или это занимает наименьшее значение?

Или есть какое-то правило, о котором я должен знать?

Ответы [ 2 ]

5 голосов
/ 06 февраля 2011

C будет брать младший байт при сужающем преобразовании, поэтому, если у вас целочисленное значение 0xCAFEBABE и вы конвертируете его в символ, вы получите значение 0xBE.

Конечно, нет никакой реальной гарантии, что int - это четыре байта или что char - один, но я уверен, что логика выполнения усечения всегда будет одинаковой и просто отбросит биты высшего порядка, которые не вписываются в char.

2 голосов
/ 06 февраля 2011

Если char подписано, оно определяется реализацией, если исходное значение уже не помещается в диапазон значений для char. Реализация полностью свободна, чтобы генерировать ерунду (или поднять сигнал), если она не подходит. Если char является беззнаковым (что позволяет стандарт), то значение уменьшается по модулю 1<<CHAR_BIT (обычно 256).

...