为什么在以下代码段中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将数字转换为八进制文字。