Pergunta

Outra questão perguntou sobre como determinar / regularidade estranho em C, eo idiomática (x & 1) abordagem foi corretamente sinalizado como quebrado para o um complemento à base de sistemas, que permite o padrão C para.

sistemas existem realmente no exterior 'mundo real' dos museus de computador? Eu tenho de codificação desde 1970 e eu tenho certeza que eu nunca conheci um tal besta.

Será que alguém realmente desenvolvimento ou teste de código para esse sistema um? E, se não, devemos nos preocupar com essas coisas ou devemos colocá-los em Room 101 juntamente com fita de papel e cartões perfurados ...?

Foi útil?

Solução

Isso tudo se resume a conhecer suas raízes.
Sim, isso é tecnicamente uma técnica antiga e eu provavelmente faria o que as outras pessoas sugeriram nesta questão e usar o operador módulo (%) para determinar par ou ímpar. Mas entender o que é um complemento 1s (ou complemento 2s) é sempre uma boa coisa para saber. Querendo ou não você nunca usá-los, o seu CPU está lidando com essas coisas de todos os tempos. Por isso, nunca pode ferir a entender o conceito. Agora, os sistemas modernos torná-lo assim que você geralmente não precisa se preocupar com coisas como que por isso se tornou um tema para a programação de 101 cursos de certa forma. Mas você tem que lembrar que algumas pessoas realmente ainda usaria esta no "mundo real" ... por exemplo, ao contrário da crença popular, há pessoas que ainda usam montagem! Não muitos, mas até CPUs pode entender-prima C # e Java, alguém vai ainda tem que entender essas coisas.

E Parreira, você nunca sabe quando pode encontrar o seu próprio fazer algo onde você realmente precisa executar matemática binária e que 1s complemento poderia vir a calhar.

Outras dicas

Eu trabalho no campo telemetria e temos alguns dos nossos clientes têm conversores analógico-digitais antigos que ainda usam complemento de 1. Eu só tinha que escrever código no outro dia para converter de complemento de 1 de complemento de 2, a fim de compensar.

Então, sim, ele ainda está lá fora, (mas você não vai correr para ele muito frequentemente).

RFC 791 p.14 define a soma de verificação de cabeçalho IP como:

O campo checksum é o complemento de 16 bit de uma das complementar soma do um de todas as palavras de 16 bits no cabeçalho. Para fins de cálculo do checksum, o valor do campo checksum é zero.

Assim, um complemento ainda é muito usado no mundo real, em todos os pacotes IP único que é enviado. :)

O CDC Cibernético 18 I utilizado de volta no '80 era uma máquina complemento 1s, mas isso é quase 30 anos atrás, e eu não vi um desde (no entanto, que também foi a última vez que trabalhou em um não- PC)

Eu nunca encontrou um de um sistema de complemento, e eu tenho de codificação, desde que você tem.

Mas eu fiz encontrar um 9 do sistema do complemento - a linguagem de máquina de uma calculadora HP-41c. Eu vou admitir que isso pode ser considerado obsoleto, e eu não acho que eles nunca tiveram um compilador C para aqueles.

Temos a nossa última Honeyboxen em algum momento no ano passado 1960, o que tornou a nossa máquina mais antiga local. Foi complemento de dois. Isso não quer dizer saber ou estar ciente do complemento é uma coisa ruim. Assim, você provavelmente nunca vai correr em um de questões de complemento de hoje, não importa o quanto a arqueologia computador que eles têm de fazer no trabalho.

As questões que são mais propensos a correr em no lado do inteiro são endian questões (I 'estou olhando para você PDP ). Além disso, você vai correr em mais "mundo real" (ou seja, hoje) problemas com flutuante ponto formatos do que você vai integer formatos.

O engraçado, as pessoas a mesma pergunta em comp.std.c em 1993 e ninguém poderia apontar para um uma máquina complemento que tinha sido usado naquela época .

Então sim, eu acho que nós podemos dizer com confiança que um complemento pertence a um canto escuro da nossa história, praticamente morto, e não é uma preocupação mais.

Eu decidi para encontrar um. Os sistemas Unisys ClearPath ter um ANSI compilador C (sim, eles chamam de "American National padrão C" para o qual até mesmo a documentação PDF foi actualizado em 2013. A documentação está disponível on-line ;

Há os tipos assinados são todos usando de uma representação de complemento, com as seguintes propriedades:

Type                 | Bits | Range
---------------------+------+-----------------
signed char          |   9  |  -2⁸+1 ...  2⁸-1
signed short         |  18  | -2¹⁷+1 ... 2¹⁷-1
signed int           |  36  | -2³⁵+1 ... 2³⁵-1
signed long int      |  36  | -2³⁵+1 ... 2³⁵-1
signed long long int |  72  | -2⁷¹+1 ... 2⁷¹-1

Notavelmente, também por suportes padrão unsigned int e unsigned long não conformes, que vão desde 0 ... 2³⁶ - 2, mas podem ser alteradas para 0 ... 2³⁶ - 1 com um pragma.

é um complemento de um problema do mundo real, ou apenas um histórico?

Sim, ainda usado. É ainda utilizado em processadores Intel modernos. De Intel® 64 e IA- manual do 32 Arquiteturas Software Developer 2A , página 3-8:

3.1.1.8 Descrição Seção

Cada instrução é então descrito por número de seções de informação. A seção “Descrição” descreve a finalidade das instruções e operandos necessários em mais detalhes.

Resumo de termos que podem ser usados ??na seção de descrição:
* Legado SSE:. Refere-se a SSE, SSE2, SSE3, SSSE3, SSE4, AESNI, PCLMULQDQ e quaisquer futuros conjuntos de instruções que fazem referência registros XMM e codificadas sem um prefixo VEX
* VEX.vvvv. A VEX bitfield especificando um registo origem ou destino (em forma de complemento de 1).
* Rm_field: abreviada para a r campo Modr / M / m e qualquer REX.B
* Reg_field: abreviação para o campo reg Modr / M e qualquer REX.R

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