Подпись - Signedness

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

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

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

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

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

В Язык программирования C вместе со своими производными реализует подпись для всех целочисленные типы данных, а также для "характер". Для целых чисел беззнаковый модификатор определяет беззнаковый тип. Целочисленная подпись по умолчанию подписана, но может быть установлена ​​явно с помощью подписанный модификатор. Напротив, стандарт C объявляет подписанный символ, беззнаковый символ, и char, быть три различных типов, но указывает, что все три должны иметь одинаковый размер и выравнивание. В дальнейшем, char должен иметь тот же числовой диапазон, что и подписанный символ или беззнаковый символ, но выбор которых зависит от платформы. Целое число литералы можно сделать без подписи с помощью U суффикс. Например, 0xFFFFFFFF дает −1, но 0xFFFFFFFFU дает 4294967295 для 32-битного кода.

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

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

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

  • «Обзор числового типа». MySQL 5.0 Справочное руководство. mysql.com. 2011 г.. Получено 6 января 2012.
  • "Понять правила преобразования целых чисел", Стандарт кодирования CERT C, Группа реагирования на компьютерные чрезвычайные ситуации, получено 31 декабря, 2015