Коды C и ASCII: как 128 может представлять символ, если его диапазон составляет от -128 до 127? - PullRequest
0 голосов
/ 21 ноября 2018

Я имею в виду этот вопрос, потому что я не могу понять, как символы ASCII от 0 до 255 могут быть представлены со знаком со знаком, если его диапазон от -128 до 127.

Быть символом =sizeof (char) = 1 байт, также разумно думать, что он может легко представлять значения до максимума 255;

Так почему в назначении: char a = 128 нет ничего плохого, а также почему я не должен использовать для него unsigned char.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

char c = 128; само по себе является правильным в C. Стандарт гласит, что char содержит CHAR_BIT битов, которые могут быть больше 8. Также, char может быть подписан или не подписан, определен реализацией иunsigned char должен содержать как минимум диапазон [0, 255].

Таким образом, реализация, в которой char больше 8 бит или char по умолчанию не подписана, эта строкадопустимый и релевантный.

Даже в обычной 8-битной подписанной реализации char выражение все еще четко определено в том, как оно преобразует 128 в соответствие char, поэтому нетпроблема.

В реальных случаях компилятор часто выдает предупреждение, например, clang:
warning: implicit conversion from 'int' to 'char' changes value from 128 to -128 [-Wconstant-conversion].

0 голосов
/ 21 ноября 2018

со знаком или без знака - требуется 8 бит.8 бит может содержать 256 значений.Просто вопрос, как мы их используем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...