Ir ao conteúdo

Diferenciação entre "byte normal" e sinal-magnitude


Ir à solução Resolvido por vtrx,

Posts recomendados

Postado

Gostaria de saber como uma máquina consegue julgar se um byte vai ser lido de "forma normal" ou como sinal magnitude.

 

Ex: 10011001

Este byte pode representar tanto 153, quanto -25. Como um computador consegue identificar qual destas opções o usuário está passando, já que o byte é o mesmo?

 

Att.

 

  • Membro VIP
Postado

Em c é definido como unsigned char e signed char .. de 0 a 255 e de -127 a +127 respectivamente. Com isso em "mente" a cpu considera o bit 7 com sinal: se 0 é positivo, se 1 é negativo .. ou vice versa..

🙃

  • Curtir 1
Postado
2 horas atrás, .if disse:

Em c é definido como unsigned char e signed char .. de 0 a 255 e de -127 a +127 respectivamente. Com isso em "mente" a cpu considera o bit 7 com sinal: se 0 é positivo, se 1 é negativo .. ou vice versa..

🙃

Me refiro a operações de baixo nível. Neste caso o sinal elétrico enviado é processado centenas de vezes até termos algo intuitivo.

  • Confuso 1
  • Membro VIP
Postado
2 horas atrás, MarceloGomes disse:

operações de baixo nível.

assembly-inteiros11.jpg

https://roveran.wordpress.com/2018/02/16/assembly-operações-com-bits-numeros-com-sinal-e-tabela-ascii/

 

Não entendi...

2 horas atrás, MarceloGomes disse:

o sinal elétrico enviado é processado centenas de vezes até termos algo intuitivo

🤔

 

Já em nível ainda mais baixo existe no hw da cpu. P.ex. num simples atmega328

maxresdefault.jpg

.. há o bit 2 de SREG que identifica se o byte que está no registro é positivo ou negativo.. apesar que pode ser também o bit 4.. se achar que deve, pesquise...

Postado
2 horas atrás, .if disse:

/cdn-cgi/mirage/eea12afd71b111273ecfa0774ba9ec5198f9a194a2f65a93e68e95f908d9c6b9/1280/https://roveran.files.wordpress.com/2018/02/assembly-inteiros11.jpg

https://roveran.wordpress.com/2018/02/16/assembly-operações-com-bits-numeros-com-sinal-e-tabela-ascii/

 

Não entendi...

🤔

 

Já em nível ainda mais baixo existe no hw da cpu. P.ex. num simples atmega328

/cdn-cgi/mirage/eea12afd71b111273ecfa0774ba9ec5198f9a194a2f65a93e68e95f908d9c6b9/1280/https://i.ytimg.com/vi/D78RexTIuKk/maxresdefault.jpg

.. há o bit 2 de SREG que identifica se o byte que está no registro é positivo ou negativo.. apesar que pode ser também o bit 4.. se achar que deve, pesquise...

Vou reformular a pergunta:

 

Um computador interpreta apenas 0 ou 1, ligado ou desligado.

Caso eu queira representar o número 153 tenho de passar o seguinte byte de informação => 10011001 !!!!!

 

Caso eu queira representar o número -25 eu também passo esse mesmo byte, isso porque o primeiro bit indica que ele é negativo e o restante representa o número em si.

 

Agora, pensando no trabalho do computador: como será possível identificar se foi passado o número 153 ou -25, já que o byte é o mesmo (10011001)???

 

Obs: a respeito de como se forma um byte de número negativo eu entendi, o que não entendi é como o computador consegue fazer a diferenciação citada acima.

 

Creio que agora tenha ficado mais claro.

 

Att.

  • Membro VIP
Postado

No mundo binário não existe negativo (nem fracionário). Portanto aquele bit naquela posição é um artifício do hw da cpu pra tratar negativo.

53 minutos atrás, MarceloGomes disse:

como o computador consegue fazer a diferenciação citada acima.

Há também o já dito flag que identifica pra ela o sinal de dado + ou -

Googlei isso... dá pra ter 1 ideia... (clique)

 

maxresdefault.jpg

Já pra cpu 32 bits nem procurei.. menos ainda pra de 64 ...

  • Solução
Postado

O segredo esta na implementação ou sistema operacional.

São eles que vão interpretar o resultado conforme foram programados,fisicamente não existe diferença entre 127 e -127,é uma implementação de sistema,o sistema vão analisar se é preciso verificar algum valor na metade do byte para definir o numero ou se o valor será o byte todo.

  • Curtir 1
Postado
28 minutos atrás, .if disse:

No mundo binário não existe negativo (nem fracionário). Portanto aquele bit naquela posição é um artifício do hw da cpu pra tratar negativo.

Há também o já dito flag que identifica pra ela o sinal de dado + ou -

Googlei isso... dá pra ter 1 ideia... (clique)

 

/cdn-cgi/mirage/eea12afd71b111273ecfa0774ba9ec5198f9a194a2f65a93e68e95f908d9c6b9/1280/https://i.ytimg.com/vi/X50H1Hh4dBo/maxresdefault.jpg

Já pra cpu 32 bits nem procurei.. menos ainda pra de 64 ...

Onde está este material completo?

7 minutos atrás, vtrx disse:

O segredo esta na implementação ou sistema operacional.

São eles que vão interpretar o resultado conforme foram programados,fisicamente não existe diferença entre 127 e -127,é uma implementação de sistema,o sistema vão analisar se é preciso verificar algum valor na metade do byte para definir o numero ou se o valor será o byte todo.

Obrigado, simples e direto.

 

Agora... Em relação ao sistema, consegue me recomendar algo que eu possa estudar a respeito deste processo que você citou?

Postado

Como a @.if bem disse na linguagem de alto nível existe o número negativo pela interpretação do bit mais elevado. No baixo nível (assembler) não existe a interpretação do negativo mas o Status register indica quando o resultado de uma operação é <0. No entanto uma soma ou subtração com números unsigned ou com números signed conseguem ser realizadas pela ALU do processador porque os resultados na leitura binária são os mesmos. Muda apenas a interpretação numérica que será feita pelo software testando o bit mais alto quando a variável estiver marcada como signed.

 

Veja a régua de interpretação feita pelo software para uma palavra de 8 bits (char):

binário          0000 000     0111 1111   1000 0000    1111 1111

unsigned            0                 127             128               255

signed                0                 127            -128               -1

 

Uma demonstração prática:

1110 0111        representa -25 e 231 (signed / unsigned)

0000 1010       representa 10 e 10 (signed / unsigned)

1111 0001       é a soma binária e representa -15 e 241 (signed / unsigned)

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...