例如:
int main(){
int x = 01234567;
printf("\n%d\n",x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
以下代码生成:342391
如果我在开头没有包含0,那么值x将是1234567,为什么C以这种方式存储值并且有没有办法让它不这样做?
用前导0写的整数常量被解释为八进制(base-8),而不是十进制(base-10).这类似于0x触发十六进制(base-16)解释.
基本上你所能做的就是不要在整数常量上设置前导0.
在编译时,C 编译器将识别代码中的任何整数文字,然后通过一组规则解释它们,以获得供程序使用的二进制值:
int x = 0x22给出 的x十进制值2 * 16^1 + 2 * 16^0 = 34。int x = 022给出 的x十进制值2 * 8^1 + 2 * 8^0 = 18。int x = 22给出 的x十进制值22。应该注意的是,GCC支持一个扩展,它提供了另一种以二进制格式指定整数的规则。此外,这些规范方法仅在编译时支持整数文字。
| 归档时间: |
|
| 查看次数: |
2943 次 |
| 最近记录: |