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


87

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

unsigned Rotate(unsigned object, int count)

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

Ответы:


92

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

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

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


Разрешено ли это делать 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;

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чтобы избежать путаницы, которую вы испытываете.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.