Perché 050 non è uguale a 50 nel seguente snippet?

Perc050 non è uguale a 50 nel seguente snippet?

 #include  int main(void) { int x=050,y=50; int ans; ans= x==y ? x+3 : y+7; printf("%d\n",ans); } 

Perché 050 è considerato ottale e 50 è considerato decimale.

Quindi x = 050 significa fondamentalmente x = 40 .

6.4.4.1/3

Una costante decimale inizia con una cifra diversa da zero e consiste in una sequenza di cifre decimali. Una costante ottale consiste nel prefisso 0 opzionalmente seguito da una sequenza di cifre da 0 a 7.

050 viene interpretato come ottale, con 8 invece di 10 come numero di base.

lo stesso motivo per cui 0x50 non è lo stesso di 50 o 050

  • 50 – base 10
  • 0x50 – base 16
  • 050 – base 8 (mai vista la necessità di usare questo, mai)

Perché 050 è una costante ottale.

050 è 40 in ottale. Lo 0 trasforma il numero in un letterale ottale.