Что такое неподписанный тип данных?

Я видел этот тип unsigned "typeless", который использовался пару раз, но никогда не видел объяснений. Я предполагаю, что существует соответствующий тип signed. Вот пример:

static unsigned long next = 1;
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
    next = next * 1103515245 + 12345;
    return((unsigned)(next/65536) % 32768);
}
void mysrand(unsigned seed) {
    next = seed;
}

То, что я собрал до сих пор:
- в моей системе, sizeof(unsigned) = 4 (намекает на 32-битный беззнаковый int)
- он может быть использован как сокращенный вариант для литья другого типа в неподписанную версию:

signed long int i = -42;
printf("%u\n", (unsigned)i);

Является ли это ANSI C или просто расширением компилятора?

Ответ 1

unsigned действительно является сокращением для unsigned int и поэтому определяется в стандарте C.

Ответ 2

unsigned означает unsigned int. signed означает signed int. Использование только unsigned - это ленивый способ объявления unsigned int в C. Да, это ANSI.

Ответ 3

Исторически в C, если вы опустили тип данных "int", предполагалось. Таким образом, "unsigned" является сокращением для "unsigned int". Это считается плохой практикой в ​​течение длительного времени, но по-прежнему существует довольно много кода, который использует его.

Ответ 4

в C, unsigned является ярлыком для unsigned int.

У вас то же самое для long, что является ярлыком для long int

И также можно объявить unsigned long (это будет unsigned long int).

Это в стандарте ANSI

Ответ 5

В C и С++

unsigned = unsigned int (Integer type)
signed   = signed int (Integer type)

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

Целое без знака является либо положительным, либо нулевым.

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

Ответ 6

Отправка моего ответа из другого вопроса.

Из спецификация C, раздел 6.7.2:

- unsigned или unsigned int

Значение unsigned, если не указано тип, по умолчанию должно быть unsigned int. Поэтому запись unsigned a совпадает с unsigned int a.