Согласно стандарту C (6.7.2 Спецификаторы типа, стр. # 2)
- ... Каждый список спецификаторов типов должен быть одним из следующих мультимножеств (разделены
запятыми, когда существует более одного мультимножества
за единицу); спецификаторы типа могут встречаться в любом порядке, возможно
смешанный с другими спецификаторами объявления.
...
— unsigned, or unsigned int
...
— unsigned long, or unsigned long int
Таким образом, спецификатор типа в приведенном выражении ( unsigned )
обозначает тип unsigned int
.
Если вы хотите привести к unsigned long
, вы должны написать ( unsigned long )
или ( usigned long int )
. И, как написано в цитате, вы можете использовать любой порядок спецификаторов типа, например, ( int long unsigned )
.