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 ++?

È stato utile?

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

architetture esotiche comitati di normazione si preoccupano

Esistono implementazioni non-due-complemento di C?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top