In C storing values that start with zero get mutated, why?

前端 未结 4 2122
闹比i
闹比i 2020-12-19 15:25

For example:

int main(){

    int x = 01234567;

    printf(\"\\n%d\\n\",x);

    return 0;

}

The following code produces: 342391

4条回答
  •  执笔经年
    2020-12-19 16:04

    At compile time a C compiler will identify any integer literals in your code and then interpret these via a set of rules to get their binary value for use by your program:

    • Base-16 (Hexadecimal) - Any integer literals beginning with '0x' will be treated as a hexadecimal value. So int x = 0x22 gives x the decimal value of 2 * 16^1 + 2 * 16^0 = 34.
    • Base-8 (Octal) - Any integer literals beginning with '0' will be treated as an octal value. So int x = 022 gives x the decimal value of 2 * 8^1 + 2 * 8^0 = 18.
    • Base-10 (Decimal) - Any integer literals not matching the other two rules will be treated as a decimal value. So int x = 22 gives x the decimal value of 22.

    It should be noted that GCC supports an extension which provides another rule for specifying integers in binary format. Additionally, these methods of specification are only supported for integer literals at compile time.

提交回复
热议问题