Ответ 1
unsigned
действительно является сокращением для unsigned int
и поэтому определяется в стандарте C.
Я видел этот тип 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 или просто расширением компилятора?
unsigned
действительно является сокращением для unsigned int
и поэтому определяется в стандарте C.
unsigned
означает unsigned int
. signed
означает signed int
. Использование только unsigned
- это ленивый способ объявления unsigned int
в C. Да, это ANSI.
Исторически в C, если вы опустили тип данных "int", предполагалось. Таким образом, "unsigned" является сокращением для "unsigned int". Это считается плохой практикой в течение длительного времени, но по-прежнему существует довольно много кода, который использует его.
в C, unsigned
является ярлыком для unsigned int
.
У вас то же самое для long
, что является ярлыком для long int
И также можно объявить unsigned long
(это будет unsigned long int
).
Это в стандарте ANSI
В C и С++
unsigned = unsigned int (Integer type)
signed = signed int (Integer type)
Беззнаковое целое число, содержащее n бит, может иметь значение от 0 до (2 ^ n-1), что составляет 2 ^ n разных значений.
Целое без знака является либо положительным, либо нулевым.
Подписанные целые числа хранятся на компьютере с использованием 2 дополнений.
Отправка моего ответа из другого вопроса.
Из спецификация C, раздел 6.7.2:
- unsigned или unsigned int
Значение unsigned
, если не указано тип, по умолчанию должно быть unsigned int
. Поэтому запись unsigned a
совпадает с unsigned int a
.