sábado, 14 de setembro de 2013

Operadores Unários: Negação !, Pré e pós incremento ++, Pré e pós decremento --, Sinal positivo +, Sinal negativo -, Inversão de bits ~, Cast ()

Operadores unários são operadores que envolvem apenas um operando, tais como:
            - Negação !
            - Pré e pós incremento ++
            - Pré e pós decremento --
            - Sinal positivo +
            - Sinal negativo -
            - Inversão de bits ~
            - Cast ()

Operador de negação: !

É utilizado para inverter o valor de uma expressão booleana, ou seja uma expressão !true retorna false e uma expressão !false retorna true.
Vamos à prática:
class OperadorNegacao{
            public static void main(String args[]){     
                        boolean verdadeiro = true;
                        System.out.println("Verdadeiro = " + verdadeiro);
                        System.out.println("!Verdadeiro = " + !verdadeiro);
            }
}

Operador de incremento e decremento: ++,--

Estes operadores modificam o valor de uma expressão adicionando ou subtraindo 1. Os operadores de incremento e decremento podem ser:
            - Pós-fixados: O incremento ou decremento é feito após o uso da variável.
            - Pré-fixados: O incremento ou decremento é feito antes do uso da variável.
Vamos à prática:
class OperadorIncrementoDecremento{
            public static void main(String args[]){     
                        int incremento = 5;
                        int decremento = 8;
                        System.out.println("Pos-fixados:");
                        System.out.println("incremento atual=" + incremento);
                        System.out.println("incremento++=" + incremento++); // primeiro exibe na tela depois adiciona 1
                        System.out.println("depois do incremento=" + incremento);
                        System.out.println("-----------");
                        System.out.println("decremento atual=" + decremento);
                        System.out.println("decremento--=" + decremento--); // primeiro exibe na tela depois tira 1
                        System.out.println("depois do decremento=" + decremento);
                        //Neste momento a variavel incremento é igual a 6
                        //Neste momento a variavel decremento é igual a 7
                        System.out.println("");
                        System.out.println("Pre-fixados:");
                        System.out.println("incremento atual=" + incremento);
                        System.out.println("++incremento=" + ++incremento); // primeiro adiciona 1 e depois exibe na tela
                        System.out.println("depois do incremento=" + incremento);
                        System.out.println("-----------");
                        System.out.println("decremento atual=" + decremento);
                        System.out.println("--decremento=" + --decremento); // primeiro tira 1 e depois exibe na tela
                        System.out.println("depois do decremento=" + decremento);
            }
}

Operadores de representação de sinal: + e -

Os operadores unários + e – representam positivo e negativo respectivamente. O operador + não tem outra função a não ser deixar explicito que um numero é positivo (O operador mais quando utilizando com Strings serve como concatenação e quando utilizado com dois números como soma, porem para este tópico ele serve apenas para deixar explicito que um numero é positivo).
Exemplo:
int numeroNegativo = -12;
int numeroPositivo = +12; // numeroPositivo = 12 seria exatamente igual.

Operador de inversão: ~

Conhecido como Bitwise Inversion Operator (operador de inversão de bits) converte todos os bits 1 em 0 e todos os 0 em 1.
Exemplo:
int numeroInvertido = ~7 è numeroInvertido = 7 + 1 invertendo o sinal = - 8
int numeroInvertido = ~-20 è numeroInvertido = -20+1 invertendo o sinal = 19

Operador de conversão: Cast

O operador cast é utilizado para uma conversão explicita em uma expressão:
            - Cast pode ser aplicado para trocar tipos de valores primitivos.
            - Cast pode ser aplicado em referencia a objeto.
Existem dois tipos de cast:
            - Cast explicito:
                        Quando queremos que uma variável de tipo maior seja convertida em um tipo menor. Exemplo quando queremos que double seja convertido em um byte, se não fizermos o cast explicitamente teremos um erro de compilação.
            - Cast automatico:
                        Não precisamos fazer o cast explicito ou seja quando uma variável cabe em outra. Exemplo quando queremos colocar um byte em um short.
Agora como saber que uma variável cabe em outra? Abaixo segue uma ordem da esquerda para direita:
byte è short ou char è int è long è float è double
Ou seja um byte sempre cabe em um short, um short sempre cabe eu um int ou em um char e assim por diante, para estes casos podemos utilizar o cast automático, porem caso você queira colocar um int em short devera usar o cast explicito onde você estará informando ao compilador “Ei eu sei o que estou fazendo este valor de int cabe em short”. TENHA CERTEZA DO QUE ESTA FAZENDO, POIS O COMPILADOR IRÁ REMOVER OS BITS DO VALOR O QUE ACARRETARA EM UMA PERDA DE PRECISÃO.
Vamos à prática:
class OperadorConversao{
            public static void main(String args[]){                            
                        byte meuByte = 123;
                        short meuShort = 1234;
                        int meuInt = 12345;
                        char meuChar = 'd';
                        long meuLong = 123456;
                        float meuFloat = 12.4567f; // adicionado o f para forçar float caso não coloque é considerado um double
                        double meuDouble = 123.456785;
                        System.out.println("Valores Atuais:");
                        System.out.println("meuByte = " + meuByte);
                        System.out.println("meuShort = " + meuShort);
                        System.out.println("meuChar = " + meuChar);
                        System.out.println("meuInt = " + meuInt);                     
                        System.out.println("meuLong = " + meuLong);
                        System.out.println("meuFloat = " + meuFloat);
                        System.out.println("meuDouble = " + meuDouble);
                       
                        System.out.println("Cast automatico:");
                        meuShort = meuByte; // meuByte e menor meuShort cast automatico
                        meuInt = meuShort; // meuShort e menor meuInt cast automatico
                        meuLong = meuInt; // meuInt e menor meuLong cast automatico
                        System.out.println("meuShort = " + meuShort);
                        System.out.println("meuInt = " + meuInt);
                        System.out.println("meuLong = " + meuLong);
                       
                        System.out.println("Cast Explicito:");
                        meuFloat = (float)meuDouble; // Double é maior que float por isso é necessario informar ao compilado "Ei sei o que estou fazendo! O valor da minha variavel double vai caber no float"
                        meuLong = 1231312312;
                        meuInt = (int)meuLong;
                        meuShort = (short)meuInt;
                        System.out.println("meuFloat = " + meuFloat);
                        System.out.println("meuLong = " + meuLong);
                        System.out.println("meuInt = " + meuInt);
                        System.out.println("meuShort = " + meuShort); // perceba que o valor mostrado é totalmente diferente ou seja foi feito um cast erroneamente pois o valor de int não cabe no short.
                       
            }
}

Com isso finalizo o post de operadores unários e fica a dica: Tome cuidado com cast explicito tenha certeza do que esta fazendo pois pode ocorrer perda de precisão.

Até o próximo post.






Nenhum comentário:

Postar um comentário