Что означает подпись символа?

С точки зрения ценности, которую 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 в комментариях:

c

string

character-encoding

char

signed

2022-11-08T20:25:34+00:00