Беззнаковое ключевое слово в C ++

87

Используется ли ключевое слово unsigned по умолчанию для определенного типа данных в C ++? Я пытаюсь написать функцию для класса для прототипа:

unsigned Rotate(unsigned object, int count)

Но я действительно не понимаю, что unsignedозначает. Разве это не должно быть похоже unsigned intили что-то в этом роде?

Кристалл
источник

Ответы:

92

По ссылке выше:

Некоторые из этих типов можно изменить с помощью ключевых слов signed, unsigned, short и long. Когда один из этих модификаторов типа используется сам по себе, предполагается тип данных int

Это означает, что вы можете предположить, что автор использует целые числа.

futureelite7
источник
Разрешено ли это делать C99 и MISRA?
nowox
42

Целочисленные типы:

short            -> signed short
signed short
unsigned short
int              -> signed int
signed int
unsigned int
signed           -> signed int
unsigned         -> unsigned int
long             -> signed long
signed long
unsigned long

Будьте осторожны с char:

char  (is signed or unsigned depending on the implmentation)
signed char
unsigned char
Мартин Йорк
источник
1
@ Firas: Я знаю, что это в C. Неявный int не является ни частью ISO C99, ни частью ISO C ++
Prasoon Saurav
4
Использование unsigned (само по себе) для объявления типа unsigned int является стандартом в C ++. В текущем стандарте: 7.1.5.2 [dcl.simple.type] имеет таблицу, которая идентифицирует каждое объявление типа по фактическому используемому типу. В этой таблице есть соответствие от объявления 'unsigned' типу 'unsigned int'.
Дэвид Родригес - dribeas
2
Обратите внимание, что char имеет то же поведение, что и signed char, или unsigned char, но остается отдельным типом, несмотря ни на что.
@Firas: См. Раздел 3.9.1 Основные типы. Пункт 2: <quote> Существует пять стандартных целочисленных типов со знаком: «signed char», «short int», «int», «long int» и «long long int». </quote>
Мартин Йорк,
21

Использует ли ключевое слово unsigned по умолчанию для типа данных в C ++

Да, подписанные и неподписанные также могут использоваться как автономные спецификаторы типа

Целочисленные типы данных char, short, long и int могут быть знаковыми или беззнаковыми в зависимости от диапазона чисел, которые необходимо представить. Типы со знаком могут представлять как положительные, так и отрицательные значения, тогда как типы без знака могут представлять только положительные значения (и ноль).

Целое число без знака, содержащее n битов, может иметь значение от 0 до 2 n - 1 (что представляет собой 2 n различных значений).

Однако подписанные и беззнаковые также могут использоваться как автономные описатели типа, что означает то же самое, что и подписанные int и unsigned int соответственно. Следующие два объявления эквивалентны:

unsigned NextYear;
unsigned int NextYear;
Prasoon Saurav
источник
3
Разве это не «да»? По умолчанию используется значение int, если используется без типа?
раскрутите
Спасибо! Английский - не мой родной язык, и я был озадачен значением беззнакового типа данных. Чья на нем подпись? Мне никогда не приходило в голову, что это могло быть от существительного знака ...: D
user74200 08
Ключевые слова shortи longтакже являются модификаторами типа . Если вы пишете short s, это на самом деле означает short int s, как на unsigned uсамом деле unsigned int u. (и unsigned shortозначает unsigned short int)
Бен Войт
8

Вы можете прочитать о ключевом слове unsigned в Справочнике по C ++. .

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

В 32-битной системе целое число составляет 32 бита, что означает, что оно может содержать значение ~ 4 миллиарда.

И когда он подписан, это означает, что вам нужно разделить его, оставив от -2 миллиарда до +2 миллиарда.

Однако, когда оно беззнаковое, значение не может содержать никаких отрицательных чисел, поэтому для целых чисел это будет означать от 0 до +4 миллиардов.

В Википедии есть немного больше информации об этом .

Филип Экберг
источник
2
Я сам люблю петь для большинства вещей. Вкусный уголь и кармелизация!
Omnifarious
1
Как насчет правки опечаток? ... вот для чего нужна кнопка "редактировать"!
Филип Экберг,
3

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

Эта бородавка в основном ликвидирована, но здесь вы встретите ее последние остатки. ИМХО, код должен быть исправлен, unsigned intчтобы избежать путаницы, которую вы испытываете.

Всевозможный
источник