беззнаковое приведение 32 бит - PullRequest
1 голос
/ 17 июня 2019

В 32-битной системе, каково поведение простого unsigned приведения?

Например, допустим, у меня есть long var = 1, (unsigned)var приведёт его к unsigned longили unsigned int?

1 Ответ

4 голосов
/ 17 июня 2019

Согласно стандарту C (6.7.2 Спецификаторы типа, стр. # 2)

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

Таким образом, спецификатор типа в приведенном выражении ( unsigned ) обозначает тип unsigned int.

Если вы хотите привести к unsigned long, вы должны написать ( unsigned long ) или ( usigned long int ). И, как написано в цитате, вы можете использовать любой порядок спецификаторов типа, например, ( int long unsigned ).

...