为什么在以下代码段中050不等于50?
为什么在以下代码段中050
不等于50
?
#include int main(void) { int x=050,y=50; int ans; ans= x==y ? x+3 : y+7; printf("%d\n",ans); }
因为050
被认为是八进制, 50
被认为是十进制。
所以x = 050
基本上意味着x = 40
。
6.4.4.1/3
十进制常量以非零数字开头 ,由一系列十进制数字组成。 八进制常量由pre fi x 0组成,可选地后跟一个数字0到7的序列。
050被解释为八进制,其中8而不是10作为数字基数。
同样的原因,为什么0x50与50或050不同
- 50 – 基地10
- 0x50 – 基数16
- 050 – 基础8(从未见过需要使用它,永远)
因为050
是八进制常数。
050是八进制40。 0将数字转换为八进制文字。