Following
table summarizes the bitwise operators supported by Javascript.
 
          
    
 
Operator 
 | 
  
Description 
 | 
 
~ 
 | 
  
Inverts
  bit pattern 
 | 
 
<< 
 | 
  
Perform
  Left shift 
 | 
 
>> 
 | 
  
Perform
  Right Shift 
 | 
 
>>> 
 | 
  
Perform
  unsigned right shift 
 | 
 
& 
 | 
  
Bit wise
  AND 
 | 
 
| 
 | 
  
Bit wise
  OR 
 | 
 
^ 
 | 
  
Bit wise
  Exclusive OR 
 | 
 
Before
discuss about the Bit wise operators, will discuss about Binary representations
of a number
1's Complement
1's
complement simply inverts the bits, if the bit is set to zero, it sets the bit
to 1 and if the bit is set to 1 it sets the bit to zero.
Ex:
8 in
binary            = 0 0 0 0 1 0 0 0
1's
complement(8) = 1 1 1 1 0 1 1 1
2's complement
Negative
numbers are stored in 2's complement form. i.e., -8 is 2's complement of 8.
2's
complement is sum of (1's complement of a number + 1)
Ex:
8 in
binary            = 0 0 0 0 1 0 0 0
1's
complement(8) = 1 1 1 1 0 1 1 1
2's
complement(8) =               (+) 1
                               -----------------
                                1 1 1 1 1 0 0 0
                               ----------------
-8 in 2's
complement form is 11111000
Inversion (~)
Inversion
operator change the bit value to zero, if it is one and change the bit value to
one if it is zero.
Example
a = 7;
a in
binary format is       0 0 0 0 0 1 1 1
~(a) in
binary format is  1 1 1 1 1 0 0 0
~(a)
represents -8 in binary format.        
Bit Wise Left Shift(<<)
Left shift
operator shifts all the bits to one bit left, i.e, it doubles the value.
Syntax:
    variable << n
    left shift the variable by 'n' number of
times.
    Variable << n is equals to variable =
variable * 2 power n
         var1
= 2;
        var1 << 1 = 2 * 2 power 1 = 4
        var1 << 2 = 2 * 2 power 2 = 8
        var1 << 9 = 2 * 2 power 9 = 1024
Bit Wise Right Shift(>>)
Right
shift operator simply shifts all the bits to one bit right, i.e, it simply half
(divide by 2) the value
  
Syntax:
   variable >> n
      right shift the variable by 'n' number of
times.
   Variable >> n is equals to variable =
variable / 2 power n
   var1 = 128;
   var1 >> 1 = 128 / (2 power 1) = 64
   var1 >> 2 = 128 / (2 power 2) = 32
Bit Wise unsigned Right
Shift(>>>)
Shifts all
the bits to one bit right, and make the left most bit to zero.
-128 in
2's complement form is
11111111
11111111 11111111 10000000
>>>
shifts the one bit right and replace leftmost bit by zero
so
(-128>>>1) is like below sequence
01111111
11111111 11111111 11000000 = 2147483584 (in decimal)
Bit Wise AND(&), OR(|), Exclusive
OR(^)
Bit 1 
 | 
  
Bit 2 
 | 
  
& 
 | 
  
| 
 | 
  
^ 
 | 
 
0 
 | 
  
0 
 | 
  
0 
 | 
  
0 
 | 
  
0 
 | 
 
0 
 | 
  
1 
 | 
  
0 
 | 
  
1 
 | 
  
1 
 | 
 
1 
 | 
  
0 
 | 
  
0 
 | 
  
1 
 | 
  
1 
 | 
 
1 
 | 
  
1 
 | 
  
1 
 | 
  
1 
 | 
  
0 
 | 
 
For a = 8
and b = 9.
a    = 0000 1000
b    = 0000 1001
a&b  = 0000 1000 (8 in decimal)
a    = 0000 1000
b    = 0000 1001
a|b  = 0000 10001 (9 in decimal)
a     = 0000 1000
b     = 0000 1001
a^b   = 0000 0001 (1 in decimal)
bitwise.html
<!DOCTYPE html> <html> <head> <title>Bitwise Operators</title> <style> p { font-size: 2em; color: seagreen; } </style> </head> <body> <p> <script type="text/javascript"> var a = 7; var b = 2; var c = 128; var d = -128; var e = 8; var f = 9; document.write("a = " + a + "<br />"); document.write("~a = " + ~a + "<br /><br />"); document.write("b = " + b + "<br />"); document.write("b << 1 = " + (b << 1) + "<br />"); document.write("b << 2 = " + (b << 2) + "<br />"); document.write("b << 9 = " + (b << 9) + "<br /><br />"); document.write("c = " + c + "<br />"); document.write("c >> 1 = " + (c >> 1) + "<br />"); document.write("c >> 2 = " + (c >> 2) + "<br /><br />"); document.write("d = " + d + "<br />"); document.write("d >>> 1 = " + (d >>> 1) + "<br /><br />"); document.write("e = " + e + "<br />"); document.write("f = " + f + "<br />"); document.write("e&f = " + (e & f) + "<br />"); document.write("e|f = " + (e | f) + "<br />"); document.write("e^f = " + (e ^ f) + "<br />"); </script> </p> </body> </html>
No comments:
Post a Comment