Подпись - Signedness

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

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

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

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

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

Язык программирования C , наряду с его производными, реализует подписи для всех целочисленных типов данных , а также для «символа» . Для целых чисел модификатор unsigned определяет беззнаковый тип. Целочисленная подпись по умолчанию является подписанной, но может быть явно установлена ​​с помощью модификатора signed . Напротив, стандарт C объявляет подписанный char , unsigned char и char как три разных типа, но указывает, что все три должны иметь одинаковый размер и выравнивание. Кроме того, char должен иметь тот же числовой диапазон, что и signed char или unsigned char , но выбор которого зависит от платформы. Целочисленные литералы можно сделать беззнаковыми с суффиксом U. Например, 0x FFFFFFFF дает -1, а 0xFFFFFFFFU дает 4 294 967 295 для 32-битного кода.

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

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

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

  • «Обзор числового типа» . Справочное руководство по MySQL 5.0 . mysql.com. 2011 . Проверено 6 января 2012 года .
  • «Понять правила преобразования целых чисел» , CERT C Coding Standard , Computer Emergency Response Team , получено 31 декабря 2015 г.