8 / 37 · Conceito
Complemento de dois, extensão de sinal e overflow
Distinga a interpretação signed e as condições de overflow com equações e contraexemplos.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
O peso do bit mais significativo muda
Um inteiro de bits em complemento de doisComplemento de dois Representação de inteiros com sinal por sequências de bits de largura fixa. O intervalo de n bits vai de −2^(n−1) a 2^(n−1)−1. é interpretado assim:
1010 de quatro bits é 10 em unsignedunsigned Interpretação de uma sequência de bits como inteiro não negativo. Com n bits, o intervalo é de 0 a 2^n−1; pode diferir da interpretação signed dos mesmos bits. Saiba mais e -6 em signed. Não se separa um bit de sinal para ler o restante como magnitude. Em largura fixa, é obtido invertendoNegação Operação NOT que troca 0 por 1 e 1 por 0. Uma barra sobre uma expressão aplica NOT a toda a expressão coberta. Saiba mais os bits e somando 1, mas o oposto +8 do mínimo -8 não cabe em signed de quatro bits.
Estender deve preservar o valor
A extensão unsigned acrescenta zeros à esquerda; a signed repete o sinal. Estender 1010 para 00001010 dá +10; para 11111010, dá -6. A interpretação define o circuito de extensão necessário.
logic signed [3:0] a, b;
logic signed [4:0] exact;
logic [3:0] result;
logic overflow;
assign exact = {a[3], a} + {b[3], b};
assign result = exact[3:0];
assign overflow = (a[3] == b[3]) && (result[3] != a[3]);O exemplo soma dois operandos signed sem carry de entrada. Preserva em exact a soma de cinco bits e confere o sinal do resultado reduzido.
O valor inicial é 11111010. Observe que unsigned 250 e signed −6 compartilham os mesmos bits. Ao mudar b7, as interpretações variam em sentidos opostos.
11111010 → unsigned 250 · signed -6 · hex 0xFA
Carry e overflow signed são diferentes
Há overflow se valores do mesmo sinal forem somados e o sinal do resultado mudar. Em quatro bits, é armazenado como 1010, que parece -6; fica como 0111, que parece +7. Somar dois valores de sinais opostos não produz esse excesso de intervalo.
Misturar signed e unsigned dificulta o raciocínio sobre comparação e extensão. Especifique largura e sinal de ambos os operandos e inclua mínimo, -1, 0 e máximo nos testes de fronteira.
Experimente
Em signed de 4 bits, calcule os bits armazenados e o overflow de e . Explique também o que ocorre ao negar .
Ler a explicação
é 1001, sem overflow. 10 está fora do intervalo e é armazenado como 1010 (-6), com overflow. Inverter -8 e somar 1 deixa novamente 1000, pois +8 não pode ser representado. Esse resultado não deve ser usado como valor absoluto correto.