Непідписане ключове слово в C ++


87

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

unsigned Rotate(unsigned object, int count)

Але я насправді не розумію, що unsignedозначає. Це не повинно бути unsigned intчи щось подібне?

Відповіді:


93

За посиланням вище:

Деякі з цих типів можуть бути змінені за допомогою ключових слів підпис, без знака, короткий та довгий. Коли один із цих модифікаторів типу використовується сам по собі, передбачається тип даних int

Це означає, що ви можете припустити, що автор використовує ints.


Чи дозволено це 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  (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 має ідентичну поведінку або підписаний char, або непідписаний char, але залишається окремим типом, незважаючи ні на що.

@Firas: Див. Розділ: 3.9.1 Основні типи. Параграфа 2: <quote> Існує п’ять стандартних цілочисельних типів із підписом: «підписаний символ», «короткий int», «int», «довгий int» та «довгий довгий int». </quote>
Мартін Йорк,

21

Чи має ключове слово без підпису за замовчуванням тип даних у C ++

Так, підписані та непідписані також можуть використовуватися як окремі специфікатори типу

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

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

Однак підписані та непідписані можуть також використовуватися як окремі специфікатори типу, що означає те саме, що підписано int та unsigned int відповідно. Наступні дві декларації еквівалентні:

unsigned NextYear;
unsigned int NextYear;

3
Тоді це не "так"? За замовчуванням використовується int, якщо використовується без типу?
розслабтесь

Дякую! Англійська мова не є моєю першою мовою, і мене спантеличило значення типу даних без підпису. Чий підпис він містить? Мені ніколи не спало на думку, що це могло бути від іменникового знака ...: D
user74200

Ключові слова shortта longтакож є модифікаторами типу . Якщо ви пишете short s, це насправді означає short int s, як і unsigned uнасправді означає unsigned int u. (і unsigned shortозначає unsigned short int)
Бен Войгт

8

Ви можете прочитати про ключове слово без підпису в Довідковому файлі C ++ .

У цьому питанні є два різні типи, підписані та непідписані. За замовчуванням цілі числа підписані, що означає, що вони можуть мати від’ємні значення.

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

І коли він підписаний, це означає, що вам потрібно розділити його, залишивши від 2 до 2 мільярдів.

Коли воно не має знака, однак значення не може містити жодних від’ємних чисел, тому для цілих чисел це буде означати від 0 до +4 млрд.

Про це у Вікіпедії є трохи більше інформації .


2
Я люблю співати для більшості речей сам. Смачний вуглець та кармелізація!
Всезначний

1
Як щодо редагування помилок? ... ось для чого потрібна кнопка "редагувати"!
Філіп Екберг

3

Так, це означає unsigned int. Раніше було так, що якщо ви не вказали тип даних в C, то було багато місць, де це просто передбачалося int. Це була спроба, наприклад, типів повернення функції.

Цю бородавку в основному було знищено, але ви стикаєтесь з її останніми пережитками тут. IMHO, код повинен бути виправлений так, unsigned intщоб уникнути лише тієї плутанини, яку ви відчуваєте.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.