Perché lonon è uguale a 50
nel seguente snippet?Perché 050 non è uguale a 50 nel seguente snippet?
#include <stdio.h>
int main(void) {
int x=050,y=50;
int ans;
ans= x==y ? x+3 : y+7;
printf("%d\n",ans);
}
Perché lonon è uguale a 50
nel seguente snippet?Perché 050 non è uguale a 50 nel seguente snippet?
#include <stdio.h>
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 in sostanza x = 40
.
6.4.4.1/3
Un costante decimale inizia con un numero diverso da zero ed è costituito da una sequenza di cifre decimali . Una costante ottale consiste nel prefisso 0 seguito facoltativamente da una sequenza di cifre da 0 a 7.
stesso motivo 0x50 non è la stessa di 50 o 050
Sì, è per lo più storico. C è stato sviluppato su macchine DEC PDP e aveva 8 registri generali e 8 modalità di indirizzamento. Le loro istruzioni includevano vari campi a 3 bit per il loro riferimento, quindi Octal era estremamente naturale. E C è stato originariamente progettato e utilizzato per implementare Unix su PDP. Penso che la modalità ottale sia come un piccolo accento nativo che C e i suoi derivati hanno, che dà via dove sono stati allevati per la prima volta. :-) – SusanW
Perché 050
è una costante ottale.
050 viene interpretato come ottale, con 8 anziché 10 come numero di base.
Probabilmente intendevi ottale. Octadecimal sarebbe la base 18. –
ho capito. grazie a tutti ... –
@KarlBielefeldt: Grazie, hai ragione. –
050 è 40 in ottale. Lo 0 trasforma il numero in un letterale ottale.
Sarebbe educato accettare la risposta corretta –