Forum Main Page > [Tutoriais] - Certificação

Cap. 3 - Operadores e atribuições

Goto page 1

New Topic    Reply Message
  1. Comment Arrow




  1. kuesley
    Offline
    Posts: 781

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44



    Esta página exibe apenas os comentários deste tutorial, para ler o artigo, clique aqui.






  1. bonoddr
    Offline
    Posts: 78

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    Surgiu uma dúvida quanto ao operador bit complementar (~). Testei o exemplo, fazendo:



    O valor de x é 2, beleza. Para achar o y, não devo fazer: 0010 e inverter os bits? Ficaria: 1101. O resultado seria igual a 13 seguindo essa idéia, mas o compilador informa que a variável y vale -3! Isso não ficou claro pra mim, alguma coisa que não me liguei?

    Valeu aí galera 8)
    _________________
    JavaFree.org




  1. lap_junior
    Offline
    Posts: 914

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    Isto ocorre por o operador inverte todos os bit do numero, lembre-se que int tem 32 bit, então:



    Resultado:

    Quote:

    x = 2, bit: 10
    y = -3, bit: 11111111111111111111111111111101



    flw

    _________________
    JavaFree.org
    Blog




  1. bonoddr
    Offline
    Posts: 78

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    Quote:
    x = 2, bit: 10
    y = -3, bit: 11111111111111111111111111111101



    Cara na boa... -3 não é representado por este número não! Entendi que o complemento também realiza a troca para o sinal do número. Então, se o 2 é representado por 10, fazendo o complemento fica 01. Como o sinal DEVE ser trocado, então o 1º bit (que representa o sinal do número) deve ser trocado. Então, fica: 11, representado por -3.

    *editado* Vi que os bits TODOS são realmente trocados, mas como o número 2 é representado por apenas 2 bits, então todos esses 1´s antes do 01 são ignorados. Vale trocar o 1º zero por 1 para definir o sinal que deve ser diferente.
    _________________
    JavaFree.org




  1. micheldf
    Offline
    Posts: 256

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    No item:

    Quote:

    3.2 - Atribuição de Tipos Primitivos


    Atribuições elementares não precisam ser discutidas, pois você já deve está familiarizado, agora um regrinha deve ser lembrada para sempre: toda atribuição que é resultada de uma operação (seja ela qual for: soma, divisão, deslocamento de bits....) envolvendo tipos inteiros (byte, short, int, long) SEMPRE RESULTARÁ EM UM TIPO INT !!!

    Portanto:

    byte x = 1; // ok
    byte y = 2 + 3; // ok
    byte z = x + y; // deveria aceitar pois 6 cabe perfeitamente em um tipo byte, porém é necessário uma converão explícita
    byte z = (byte)x + y; // agora sim



    A última linha não funciona assim, porque o casting tem que ser do resultado da operação, e nesse caso o casting está funcionando apenas para o identificador x.
    Eu consegui aqui fazendo da seguinte forma (só a ultima linha)

    _________________
    Michel Dambros Figueiredo
    Analista J2EE / Consultor SAP NetWeaver
    micheldf@gmail.com
    SAP Certified Consultant NetWeaver 04 - Web Application Development - Focus JAVA
    SCWCD Sun Certified Web Component Developer
    SCJP Sun Certified Programmer for the Java 2 Platform




  1. Gaguin
    Offline
    Posts: 1

    Comment Arrow

    Publicado em: 10/04/2009 05:18:44

    lap_junior:
    Isto ocorre por o operador inverte todos os bit do numero, lembre-se que int tem 32 bit, então:



    Resultado:

    Quote:

    x = 2, bit: 10
    y = -3, bit: 11111111111111111111111111111101



    flw



    A forma mais fácil de resolver isso é utilizando a seguinte formula:

    (-x)-1

    no caso

    x = 2

    (-2)-1 = -3

    Fácil ou simples?




  1. Relacionados




  1. Anunciante





New Topic    Reply Message     Forum Main Page -> [Tutoriais] - Certificação


Goto page 1