Что означает подпись символа?
С точки зрения ценности, которую string они представляют:
символ без знака:
- охватывает диапазон значений
0..255 (00000000..11111111)
-
значения chars выходят за нижний край как:
0 - 1 = 255 (00000000 - 00000001 = 11111111)
-
значения strings выходят за верхний край как:
255 + 1 = 0 (11111111 + 00000001 = 00000000)
-
Оператор character-encoding побитового сдвига вправо empty-string (
>>
) выполняет логический сдвиг:10000000 >> 1 = 01000000 (128 / 2 = 64)
знаковый символ:
- охватывает диапазон значений
-128..127 (10000000..01111111)
-
значения string-manipulation выходят за нижний край как:
-128 - 1 = 127 (10000000 - 00000001 = 01111111)
-
значения str выходят за верхний край как:
127 + 1 = -128 (01111111 + 00000001 = 10000000)
-
Оператор charset-table побитового сдвига вправо character-encoding (
>>
) выполняет арифметический string-manipulation сдвиг:10000000 >> 1 = 11000000 (-128 / 2 = -64)
Я включил двоичные char представления, чтобы показать, что string-manipulation поведение обертывания значений charset-table является чистой, последовательной signed двоичной арифметикой и не character-encoding имеет ничего общего со знаком string или без знака char (за исключением strings сдвигов вправо).
Обновить
Некоторое string-manipulation поведение, зависящее от реализации, упомянуто signed в комментариях:
- char! = знаковый символ. Тип char без «подписанного» или «неподписанного» определяется реализацией, что означает, что он может действовать как подписанный или беззнаковый тип.
- Signed integer overflow leads to undefined behavior where a program can do anything, including dumping core or overrunning a buffer.
c
string
character-encoding
char
signed
Что означает подпись символа?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.