stringtranslate.com

Подписанность

В вычислительной технике знаковость — это свойство типов данных , представляющих числа в компьютерных программах. Числовая переменная является знаковой, если она может представлять как положительные , так и отрицательные числа, и беззнаковой , если она может представлять только неотрицательные числа (ноль или положительные числа).

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

Например, 16-битное целое число со знаком, дополненное до двух, может содержать значения от -32768 до 32767 включительно, тогда как 16-битное целое число без знака может содержать значения от 0 до 65535 . Для этого метода представления знаков самый левый бит ( самый значимый бит ) обозначает, является ли значение отрицательным (0 для положительного или нуля, 1 для отрицательного).

В языках программирования

Для большинства архитектур в машинном языке нет различия между знаковыми и беззнаковыми типами . Тем не менее, арифметические инструкции обычно устанавливают разные флаги ЦП , такие как флаг переноса для беззнаковых арифметических операций и флаг переполнения для знаковых. Эти значения могут быть учтены последующими ветвями или арифметическими командами.

Язык программирования C вместе со своими производными реализует знаковость для всех целочисленных типов данных , а также для «символьных» . Для целых чисел модификатор unsigned определяет беззнаковый тип. Целочисленная подпись по умолчанию подписана, но ее можно установить явно с помощью модификатора Signed . Напротив, стандарт C объявляет подписанные char , unsigned char и char тремя разными типами, но указывает , что все три должны иметь одинаковый размер и выравнивание. Кроме того, char должен иметь тот же числовой диапазон, что и знаковый char или беззнаковый char , но выбор которого зависит от платформы. Целочисленные литералы можно сделать беззнаковыми с помощью суффикса U.

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

Смотрите также

Внешние ссылки