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

Я видел этот unsigned «безличный» тип, используемый пару раз, но никогда не видел объяснений. Я предполагаю, что есть соответствующий 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 и C ++

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

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

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

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

Вывод моего ответа из другого вопроса .

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

– без знака или без знака int

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

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

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

– пустота
– char
– подписанный символ
– символ без знака
– короткий, подписанный короткий, короткий int или подписанный короткий int
– unsigned short или unsigned short int
– int, подписанный или подписанный int
– без знака или без знака int
– long, signed long, long int или long long int
– unsigned long или unsigned long int
– длинный длинный, подписанный длинный длинный, длинный длинный int или подписанный длинный длинный int
– unsigned long long или unsigned long long int
– плавать
– двойной
– длинный двойной
– _Bool
– float _Complex
– двойной _Complex
– длинный двойной _Complex
– спецификатор атомного типа
– спецификатор struct или union
– спецификатор enums
– typedef name

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

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

  • java: конвертировать float в String и String для float
  • Каков тип строкового литерала в C ++?
  • объект-литье с переменной типа
  • Тестирование, если объект имеет общий тип в C #
  • Является ли строка типом значения или ссылочным типом?
  • Сколько стоит слишком много с ключевым словом C ++ 11 auto?
  • Как определить разные типы для одного и того же classа в C ++
  • Каковы различия между типами () и isinstance ()?
  • Когда использовать значения без знака над подписанными?
  • Scala: Что такое TypeTag и как его использовать?
  • Буферный тип данных C99?
  • Interesting Posts

    Как перегружать std :: swap ()

    проблема с датой java при parsingе

    Как использовать одновременные подключения vpn через Windows 7 и привязывать их к конкретной программе?

    Транзитные ссылки в .Net Core 1.1

    Как использовать VPN-соединение в гостевой VMWare VM с хостом

    Что необходимо, чтобы модули RAM полностью совместимы друг с другом?

    Град закончил с ненулевым значением выхода 1 (ic_launcher.png: ошибка: дублированный файл)

    Как создать 7-Zip-архивы с .NET?

    Формат чисел до значительных цифр в R

    Простой способ найти, если два разных списка содержат одни и те же элементы?

    Как я могу вернуть лицензию Microsoft, поставляемую с компьютером Dell?

    jQuery AJAX ‘multipart / form-data’ Не отправлять данные?

    Тестирование производительности сериализаций, используемых привязками WCF

    Как я могу указать нужную версию Node.js в packages.json?

    «Невозможно создать общий массив …» – как создать массив карт ?

    Давайте будем гением компьютера.