Pergunta

Recentemente eu estava confuso por esta questão . Talvez porque eu não li especificações de idioma (a culpa é minha, eu sei).

O C99 norma não dizer que a representação números negativos devem ser utilizados pelo compilador. Eu sempre pensei que a única maneira certa para armazenar números negativos é complemento de dois (na maioria dos casos).

Então aqui está a minha pergunta: você conhece algum compilador atual que implementos por de um padrão representação complemento ou sinal de magnitude? Podemos mudar a representação padrão com alguma bandeira compilador?

O que é a maneira mais simples para determinar qual a representação é usado?

E o que sobre o padrão C ++?

Foi útil?

Solução

Eu acho que não é tanto uma questão do que a representação dos usos do compilador, mas sim o que a representação dos subjacentes usos da máquina. O compilador seria muito estúpido para escolher uma representação não é suportado pela máquina de destino, uma vez que iria introduzir cargas de sobrecarga para nenhum benefício.

Alguns campos de checksum no uso de um conjunto de protocolos IP complemento, por isso, talvez dedicado "acelerador de rede" CPU do tipo:. É implementá-lo

Outras dicas

Enquanto representação dois complementos é de longe o mais comum, não é o único ( ver alguns ). O C e comitês de padronização C ++ não queria exigem máquinas não-dois complementos para emular uma representação não-nativo. Logo, nem C não C ++ exigir um formato inteiro específico negativo.

Isso leva ao comportamento indefinido de operações bit a bit em tipos assinados.

O UNISYS 2200 série que implementa a própria matemática complemento, ainda está em usar. Você pode ler mais sobre isso nas perguntas abaixo

arquiteturas exóticas os comitês de padronização se preocupam com

Existem implementações não-dois complementos de C?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top