Что означают подписанные и неподписанные значения? - программирование
Подтвердить что ты не робот

Что означают подписанные и неподписанные значения?

Что означает signed в C? У меня есть эта таблица, чтобы показать:

enter image description here

Это говорит signed char 128 - +127. 128 также является положительным целым числом, так как это может быть чем-то вроде +128 to +127? Или 128 и +127 имеют разные значения? Я имею в виду книгу Apress Начало C.

4b9b3361

Ответ 1

Значенное целое число может представлять отрицательные числа; unsigned не может.

Подписанные целые числа имеют поведение undefined, если они переполняются, а целые числа без знака обходятся с использованием modulo.

Обратите внимание, что эта таблица неверна. Во-первых, он пропускает знаки - (например, от -128 до +127). Во-вторых, стандарт не гарантирует, что эти типы должны попадать в эти диапазоны.

Ответ 2

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

Поскольку все это касается памяти, в конце все числовые значения хранятся в двоичном формате. 32-разрядное целое без знака может содержать значения от всех двоичных 0 до всех двоичных 1. Когда дело доходит до 32-битного целого числа со знаком, это означает, что один из его битов (наиболее значимый) является флагом, который отмечает положительное или отрицательное значение. Итак, это проблема интерпретации, которая сообщает, что значение подписано.

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

Если вы хотите записать отрицательное значение в двоичном формате, сначала напишите положительное число, затем инвертируйте все биты и добавьте последнее 1. Когда отрицательное значение в двух дополнениях добавляется к положительному числу той же величины, результат будет 0.

В приведенном ниже примере рассмотрим 8-битные номера, потому что будет легко проверить:

positive 95: 01011111
negative 95: 10100000 + 1 = 10100001 [positive 161]
          0: 01011111 + 10100001 = 100000000
                                    ^
                                    |_______ as we're dealing with 8bit numbers,
                                             the 8 bits which means results in 0

Ответ 3

В таблице отсутствуют минусы. Диапазон подписанных char составляет от -128 до +127; аналогично другим типам на столе.

Ответ 4

Подписанные номера - это те, которые либо +, либо - добавлены вместе с ними. Например, +2 и -6 являются номерами, подписанными. Подписанные номера могут хранить как положительные, так и отрицательные числа, поэтому они имеют больший диапазон. i.e -32768 до 32767

Беззнаковые числа - это просто цифры без знака с ними. они всегда позитивны. и их диапазон составляет от 0 до 65535.

Надеюсь, что это поможет

Ответ 5

Подписанный обычно означает, что перед ним есть символ + или -. Это означает, что unsigned int, unsigned shorts и т.д. Не могут быть отрицательными.

Ответ 6

Это была опечатка в книге; подписанный char идет от -128 до 127.

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

В C символы всего 8 бит. Это означает, что они могут перейти от - (2 ^ 7) до 2 ^ 7 - 1. Это потому, что мы используем 7 последних бит для числа и первого бита для знака. 0 означает положительный и 1 означает отрицательный (в двух дополнительных представлениях).

  • Самое большое положительное 7-битное число - (01111111) b = 2 ^ 7 - 1 = 127.
  • Наименьшее отрицательное 7-битное число - (11111111) b = -128
    (потому что 11111111 является двумя дополнениями 10000000 = 2 ^ 7 = 128).

Неподписанные символы не имеют знаков, поэтому они могут использовать все 8 бит. Переход от (00000000) b = 0 к (11111111) b = 255.

Ответ 7

Подписанное целое число может иметь как отрицательные, так и положительные значения. Хотя целое число без знака может иметь только положительные значения.

Для целых чисел со знаком, используя два дополнения, которые наиболее часто используются, диапазон (в зависимости от ширины бита целого):

char s -> range -128-127

Если беззнаковый char имеет диапазон:

unsigned char s -> range 0-255

Ответ 8

Во-первых, ваша таблица неверна... отсутствуют отрицательные числа. Обращаясь к типу char...., вы можете представить на всех 256 возможностях, поскольку char имеет один байт, означает 2 ^ 8. Итак, теперь у вас есть две альтернативы для установки диапазона ур. либо от -128 до +128, либо от 0 до 255. Первый - подписан char второй без знака char. Если вы используете целые числа, имейте в виду, какая система работы u используется. 16 бит, 32 бит или 64 бит. Int (16 бит, 32 бит, 64 бит). char всегда имеет 8-значное значение.

Ответ 9

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