Вопрос

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

static unsigned long next = 1;
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
    next = next * 1103515245 + 12345;
    return((без подписи)(next/65536) % 32768);
}
void mysrand(неподписанное начальное число) {
    next = seed;
}

То, что я собрал на данный момент:
- в моей системе, sizeof(unsigned) = 4 (намекает на 32-разрядный unsigned 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 в С.Да, это ANSI.

Исторически в C, если вы опустили тип данных, предполагался «int».Таким образом, «unsigned» — это сокращение от «unsigned int».Долгое время это считалось плохой практикой, но до сих пор существует достаточное количество кода, который ее использует.

в С, unsigned это ярлык для unsigned int.

У тебя то же самое для long это ярлык для long int

А еще можно объявить unsigned long (Это будет unsigned long int).

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

На C и 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 a такой же как unsigned int a.

Согласно C17 6.7.2 §2:

Каждый список спецификаторов типа должен представлять собой один из следующих мультинаборов (разделенных запятыми, если на элемент имеется более одного мультинабора);спецификаторы типа могут встречаться в любом порядке, возможно, вперемешку с другими спецификаторами объявлений.

- пустота
— чар
— подписал персонаж
— беззнаковый символ
— короткое, короткое со знаком, короткое целое или короткое целое со знаком
— unsigned short или unsigned short int
— int, подписанный или подписанный int
— беззнаковое или беззнаковое целое число
— длинный, длинный со знаком, длинный int или длинный int со знаком
— unsigned long или unsigned long int
— long long, Signed Long Long, Long Long Int или Signed Long Long Int
— unsigned long long или unsigned long long int
- плавать
- двойной
— длинный дубль
— _Бул
— плавающий _Complex
— двойной _Комплекс
— длинный двойной _Complex
— спецификатор атомарного типа
— спецификатор структуры или объединения
— спецификатор перечисления
— имя определения типа

Так что в случае unsigned int мы можем либо написать unsigned или unsigned int, или если мы чувствуем себя сумасшедшими, int unsigned.Последнее, поскольку стандарт достаточно глуп, чтобы разрешить «...может происходить в любом порядке, возможно, вперемешку».Это известный недостаток языка.

Правильный код C использует unsigned int.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top