Unsigned hexadecimal constant in C?

前端 未结 3 2092
难免孤独
难免孤独 2020-11-27 18:07

Does C treat hexadecimal constants (e.g. 0x23FE) and signed or unsigned int?

相关标签:
3条回答
  • 2020-11-27 18:53

    According to cppreference, the type of the hexadecimal literal is the first type in the following list in which the value can fit.

    int
    unsigned int
    long int
    unsigned long int
    long long int(since C99)
    unsigned long long int(since C99) 
    

    So it depends on how big your number is. If your number is smaller than INT_MAX, then it is of type int. If your number is greater than INT_MAX but smaller than UINT_MAX, it is of type unsigned int, and so forth.

    Since 0x23FE is smaller than INT_MAX(which is 0x7FFF or greater), it is of type int.

    If you want it to be unsigned, add a u at the end of the number: 0x23FEu.

    0 讨论(0)
  • 2020-11-27 19:02

    The number itself is always interpreted as a non-negative number. Hexadecimal constants don't have a sign or any inherent way to express a negative number. The type of the constant is the first one of these which can represent their value:

    int
    unsigned int
    long int
    unsigned long int
    long long int
    unsigned long long int
    
    0 讨论(0)
  • 2020-11-27 19:06

    It treats them as int literals(basically, as signed int!). To write an unsigned literal just add u at the end:

    0x23FEu
    
    0 讨论(0)
提交回复
热议问题