Подтвердить что ты не робот

Каково фактическое использование "подписанного" ключевого слова?

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

int variable = 12;

и

signed int variable = 12;

Когда и почему вы должны использовать подписанное ключевое слово?

4b9b3361

Ответ 1

Существует только один экземпляр, где вы можете использовать ключевое слово signed. signed char всегда отличается от "plain" char, который может быть подписанным или неподписанным типом в зависимости от реализации.

С++ 14 3.9.1/1 говорит:

Определяется реализацией, может ли объект char содержать отрицательные значения. Символы могут быть явно объявлены unsigned или signed. Обычные char, signed char и unsigned char - три различных типа [...]

В других контекстах signed является избыточным.


До С++ 14 (и в C) был второй экземпляр: бит-поля. Это было определено реализацией, будь то, например, int x:2; (в объявлении класса) такая же, как unsigned int x:2; или то же, что и signed int x:2.

С++ 11 9.6/3 сказал:

Определяется реализацией того, подписано или не указано четное (без явно подписанного или без знака) char, short, int, long или long long битовое поле.

Однако, поскольку С++ 14 это было изменено, так что int x:2; всегда означает signed int. Ссылка на обсуждение

Ответ 2

В случае int нет никакой разницы. Это имеет значение только с char, потому что

  • не определено, подписан ли char или нет, и
  • char, signed char и unsigned char - это три разных типа.

Поэтому вы должны использовать signed, если вам нужен signed char (что, вероятно, редко). Кроме этого, я не могу придумать причину.

Ответ 3

signed - это целочисленный тип по умолчанию. Нет, нет никакого различия в примере, который вы дали. Существует разница только в случае char.

Источник: Справочник по С++

Ответ 4

Нет разницы между двумя, где int. Вы можете включить слово, подписанное для форматирования, если вы также объявляете unsigned int, чтобы их было проще выстраивать в линию и делать читаемыми, но для всех целей и целей вам не нужно использовать подписанное ключевое слово.