I compilatori e numeri rappresentazioni negative
-
22-08-2019 - |
Domanda
Di recente sono stato confuso dal questa domanda . Forse perché non ho letto le specifiche della lingua (che è colpa mia, lo so).
standard di C99 non dice che i numeri negativi rappresentazione dovrebbe essere utilizzato da compilatore. Ho sempre pensato che l'unico modo giusto per memorizzare i numeri negativi è complemento a due (nella maggior parte dei casi).
Quindi, ecco la mia domanda: sai qualsiasi compilatore oggi che implementa da complemento la propria impostazione predefinita oppure registrati grandezza rappresentazione? Possiamo cambiare la rappresentazione di default con alcuni flag di compilazione?
Qual è il modo più semplice per determinare quale rappresentazione viene utilizzato?
E che dire di serie C ++?
Soluzione
Credo che non è tanto una questione di ciò che la rappresentazione utilizza il compilatore, ma piuttosto ciò che la rappresentazione usa la macchina sottostante. Il compilatore sarebbe molto stupido scegliere una rappresentazione non supportata dalla macchina di destinazione, poiché ciò introdurre carichi di overhead per alcun beneficio.
Alcuni campi di checksum nell'uso suite di protocolli IP complemento a uno, quindi forse dedicato "rete acceleratore" di tipo CPU:. S attuarlo
Altri suggerimenti
complemento a due rappresentazione è di gran lunga il più comune, non è l'unico ( vedere alcuni ). I comitati di standardizzazione C e C ++ non volevano richiedere macchine non-complemento a due per emulare una rappresentazione non-native. Quindi neppure C non C ++ richiede uno specifico formato integer negativo.
Questo porta al comportamento indefinito delle operazioni bit per bit su tipi firmati.
Il UNISYS 2200 Series che implementa uno di matematica complemento, è ancora in uso. Si può leggere di più su di esso nelle seguenti domande