Подписанность
В вычислительной технике знаковость — это свойство типов данных, представляющих числа в компьютерных программах. Числовая переменная является знаковой , если она может представлять как положительные , так и отрицательные числа, и беззнаковой, если она может представлять только неотрицательные числа (ноль или положительные числа).
Поскольку числа со знаком могут представлять отрицательные числа, они теряют диапазон положительных чисел, который может быть представлен только беззнаковыми числами того же размера (в битах), поскольку примерно половина возможных значений являются неположительными значениями, тогда как соответствующий тип без знака может быть выделен все возможные значения в диапазоне положительных чисел.
Например, со знаком, дополненное до двух, 16-битное целое число может содержать значения от -32768 до 32767 включительно, тогда как 16-битное целое число без знака может содержать значения от 0 до 65535 . Для этого метода представления знаков самый левый бит ( самый значимый бит ) обозначает, является ли значение отрицательным (0 для положительного или нуля, 1 для отрицательного).
В языках программирования
[ редактировать ]нет различия между знаковыми и беззнаковыми типами Для большинства архитектур в машинном языке . Тем не менее, арифметические инструкции обычно устанавливают разные флаги ЦП, такие как флаг переноса для беззнаковых арифметических операций и флаг переполнения для знаковых. Эти значения могут быть учтены последующими ветвями или арифметическими командами.
Язык программирования C вместе со своими производными реализует знаковость для всех целочисленных типов данных , а также для «символьных» . Для целых чисел Модификатор unsigned определяет беззнаковый тип. Целочисленная подпись по умолчанию вне битовых полей подписана, но ее можно установить явно с помощью подписанный модификатор. Напротив, стандарт C объявляет подписанный символ , беззнаковый символ и char , чтобы быть тремя разными типами, но указывает, что все три должны иметь одинаковый размер и выравнивание. Дальше, char должен иметь тот же числовой диапазон, что и любой другой подписанный символ или unsigned char , но выбор которого зависит от платформы. Целочисленные литералы можно сделать беззнаковыми с помощью У. Суффикс
Компиляторы часто выдают предупреждение при сравнении знаковых и беззнаковых чисел или при приведении одного к другому. Это потенциально опасные операции, поскольку диапазоны знаковых и беззнаковых типов различны.
См. также
[ редактировать ]- Знаковый бит
- Представления чисел со знаком
- Знак (математика)
- Двоичная система угловых измерений , пример семантики, где знаковость не имеет значения
Внешние ссылки
[ редактировать ]- «Обзор числовых типов» . MySQL Справочное руководство 5.0 . mysql.com. 2011 . Проверено 6 января 2012 года .
- «Понимание правил преобразования целых чисел» , Стандарт кодирования CERT C , Группа реагирования на компьютерные чрезвычайные ситуации , получено 31 декабря 2015 г.