在C语言中,存储以零开始的值会发生变异,为什么?
例如:在C语言中,存储以零开始的值会发生变异,为什么?,c,int,storage,C,Int,Storage,例如: int main(){ int x = 01234567; printf("\n%d\n",x); return 0; } 以下代码生成:342391 如果我没有在开始时包含0,那么值x将是1234567,为什么C以这种方式存储该值,并且有没有办法从不这样做中获取该值?因为以0开头的数字表示为。您无法真正修改此行为,只是不要在开头包含零。以0开头的数值常量被解释为基数8。以前导0写入的整数常量被解释为八进制(基数8),而不是十进制(基数10)。这类似于触
int main(){
int x = 01234567;
printf("\n%d\n",x);
return 0;
}
以下代码生成:342391
如果我没有在开始时包含0,那么值x将是1234567,为什么C以这种方式存储该值,并且有没有办法从不这样做中获取该值?因为以0开头的数字表示为。您无法真正修改此行为,只是不要在开头包含零。以0开头的数值常量被解释为基数8。以前导0写入的整数常量被解释为八进制(基数8),而不是十进制(基数10)。这类似于触发十六进制(base-16)解释的
0x
基本上,这里所能做的就是不在整型常量上加前导0。在编译时,C编译器将识别代码中的任何整型文字,然后通过一组规则对其进行解释,以获得二进制值供程序使用:
- Base-16(十六进制)-任何以“0x”开头的整数文本都将被视为十六进制值。因此
给出int x=0x22
的十进制值x
2*16^1+2*16^0=34
- Base-8(八进制)-任何以“0”开头的整数文本都将被视为八进制值。因此
给出int x=022
的十进制值x
2*8^1+2*8^0=18
- Base-10(十进制)-任何与其他两个规则不匹配的整数文本都将被视为十进制值。因此
给出int x=22
的十进制值x
22