Saturday, 5 October 2013

Logical and bit-wise operators in java

Advertisement

In java both logical and bitwise operators are used. Logical operator returns the true / false value depends on the condition check and bitwise return the same true / false depends on the condition check but the difference between these operator is that logical operator only work with the boolean value where as bitwise operator work with both boolean and numeral values. How that will we see later in this post.

Logical operator

Logical operator in java only deals with the boolean value that means it will return either true or false depending on the condition check. If we try to use any other data type then it will give compilation error.

There are three types of logical operator i.e 
1> Logical AND  ( && )
2> Logical OR     (  | |  )

3> Logical NOT   (  !  )

Logical AND 

It is represented with the double ampersand ( && ) sign. basically it is a binary operator and both the operand must return either true or false value and no others data type are not acceptable with this operator.

Operand 1               Operand 2               Result 
   True                          True                     True 
   True                          False                    False
   False                         True                     False 
   False                         False                    False

Conclusion: If any of the operand is False then it will return False. 

Now think is there any need of checking if 1st operand is false ?
I think No because it is obvious that it will return false only but if 1st operand is true that means it may true or false so it is mandatory to check 2nd operand as well.


Note :- Compiler does the same that if 1st operand is false then no need to check further it further and hence save some compilation time.
for ex- 

if (  false && true && true && true ) // It will check the 1st operand if it is false then its obvious that whole statement will lead to false only so compiler will not check further. 
You can have any statement in place of true and false here but which returns either true or false value.

Logical OR

It is a binary operator and both the operand must return either true or false value and no others data type are not acceptable with this operator. It is represented like this   (  | |  ).

Operand 1               Operand 2              Result 
   True                          True                      True 
   True                          False                     True
   False                         True                      True 
   False                         False                     False

Conclusion: If any of the operand is True then it will return False
Now think is there any need of checking if 1st operand is true?
I think No because it is obvious that it will return True only but if 1st operand is false then there may be chance of returning true or false so it will be mandatory for compiler to check 2nd operand as well.

Note :- Compiler does the same thing that if 1st operand is true then no need to check it further and hence save some compilation time.

if (  true  | |  false  | |  true  | |  false ) // It will check the 1st operand if it is true then its obvious that whole statement will lead to true only so compiler will not check further. 
Here you can have any statement in place of true and false but it should return either true or false value.

Logical NOT

It is a unary operator and it will always return the result as reverse of its operand. Like if operand is true then it will return false and vice-versa.

Operand 1                    Result 
   True                             False 
   False                            True
  
Conclusion: If the operand is True then it will return False and vice-versa.                 
for ex-

if ( !  true ) // return false 
if ( !  false ) // return true

Bitwise Operator 

It is same as Logical operator but it can operate both with boolean and numeral value. There are four types of bitwise operator i.e
1> Bitwise AND    ( & )
2> Bitwise OR       (  |  )
3> Exclusive OR    ( ^  )
4> Bitwise NOT    ( ~  )    


Why named as bitwise ?

It is because for numeral values it deals bit by bit. How it deals bit by bit we will see later in this post.

Bitwise AND

It is a binary operator and represented with a single ampersand ( & ).It works same as logical operator in case of boolean value but how it works with numeral value is bit interesting .


How Bitwise AND works with the numeral value?

It deals with each bit that means it will result as 0 always and 1 when both the value are 0.Now think in zero's and one's. We all know that zero represent always false and one represent true always. 
Here it is also the same story that compiler will compare bit by bit and return the result accordingly.  
for ex-

System.out.println( (1 & 2 ) ) ; // It will display Zero as output.

1-> 01            
2-> 10             
---------
       00 ( 0 )
--------- 

Bitwise OR

It is a binary operator.It works same as logical operator in case of boolean value but how it works with numeral value is bit interesting . It is represented like this ( | ).

How Bitwise OR works with the numeral value?
It is same as Bitwise AND but only difference is it will result as 1 always and 0 when both the value are 0. 

System.out.println( (1  |  2 ) ) ; // It will display Three ( 3 ) as output.

1-> 01            
2-> 10             
---------
       11 ( 3 ) 
--------- 

Exclusive OR

It is a binary operator and represented with ( ^ ) this symbol. It result false when both the operand are either true or false otherwise true So compiler cannot be sure about result unless it checks 2nd operand. 

Operand 1               Operand 2             Result 
   True                          True                     False
   True                          False                    True
   False                         True                     True 
   False                         False                    False

Conclusion : It will return False if both the are operand are have same value either true or false otherwise true. It is same in case of bits also if both the bits are same either 1 or 0 then it will return 0 otherwise 1.

Have fun with code guys. keep experimenting!


EmoticonEmoticon