User:Fabien Labeyrie/Bit Shifting: Difference between revisions

From XPUB & Lens-Based wiki
No edit summary
No edit summary
Line 2: Line 2:
__NOEDITSECTION__
__NOEDITSECTION__
==<span style="color:#00FF00">Bit Shifting : how i learned to stop worrying and love binary numbers</span>==
==<span style="color:#00FF00">Bit Shifting : how i learned to stop worrying and love binary numbers</span>==
Here is how to deal with binary numbers when you are programming on an old computer (Basic V 2.0 on Commodore 64) or when you are configuring internal parameters on your arduino board. Thanks to Mr. Stock who made this nightmare look nearly simple.
Here is how to deal with binary numbers when you are programming on an old computer (''Basic V 2.0'' on Commodore 64) or when you are configuring internal parameters on your arduino board. Thanks to Mr. Stock who made this nightmare looking almost simple.


<br />
<br />
==What is a bit ?==
In the binary numeral system, everything looks like 0110010100010100111... <br />
The bit "is the basic unit of information in computing ([http://en.wikipedia.org/wiki/Bit Wikipedia])". It can be a 1 or a 0.
====Bit weight====
In a series of bit, each digit has got a particular weight. Let's take a series of 8 bits :
<br />
<pre>
Series = 01010110
        0  1  0  1  0  1  1  0
Weight : 128 64  32  16  8  4  2  1 
</pre>
====Definitions====
:A series of 4 bits is called a '''nibble'''.
:A series of 8 bits is called a '''byte''' or '''octet''' (2 nibbles).
:The first digit -128 in the previous example- is called '''MSB''' (Most Significant Bit).
:The last digit -1 in the previous example- is called '''LSB''' (Less Significant Bit).
:You can also talk about '''MSN''' (Most Significant Nibble) and '''LSN''' (Less Significant Nibble).
====Big Endian Vs Little Endian====
There are two ways to order the bits. Usually for binary numbers we read from right to left. It is called '''Little Endian''' because we read the lower bit first. If we read the higher bit first, it is called '''Big Endian''' ordering.
<pre>
<-- Little Endian
Big Endian -->
</pre>
<br />
==What is << (bit shifting) ?==
==What is << (bit shifting) ?==
In the binary numeral system, everything looks like 0110010100010100111... <br />
A bit shift consists in moving one or several digits in a line of 0110010100010100111... <br />
A bit shift consists in moving one or several digits in a line of 0110010100010100111... <br />


Line 20: Line 49:
1 << 3 = 1000 and 1000 in the binary numeral system = 8
1 << 3 = 1000 and 1000 in the binary numeral system = 8
</pre>
</pre>
<br />


7 << 5
7 << 5
Line 28: Line 58:
7 << 5 = 1110000 in the binary numeral system = 224
7 << 5 = 1110000 in the binary numeral system = 224
</pre>
</pre>
<br />


==Logical operations==
Logical operations can be used to set or to clear a bit. For more information about [http://en.wikipedia.org/wiki/Logic_gate#Logic_gates logic gates].
====Examples====
<br />
<br />
Using the logical operator & (AND)
<pre>
RegX = 01110011
RegX & (1 << 3)
0111 0011 AND 0000 1000 = 0000 0000
</pre>
<br />
Setting a bit with | (OR)
<pre>
RegX = 01110011
RegX | (1 << 3)
0111 0011 OR 0000 1000 = 0111 1011
</pre>
<br />
Clearing a bit with & (AND) and NOT
<pre>
RegY = 01011011
NOT(1 << 3) = 11110111
RegY & NOT(1 << 3)
0101 1011 AND 1111 0111 = 0101 0011 
</pre>
<br />
====Operators, Hexadecimal and Decimal====
<br />
AND, NOT, OR and XOR
<pre>
Operator  Binary      Hexadecimal  Decimal
          0011 0010 =  0x32      =  50
NOT  ->  1100 1101 =  0xCD      =  205
          0110 1101 =  0x6D      =  104
          0001 1010 =  0x1A      =  26
AND  ->  0000 1000 =  0x08      =  8
 
          0111 1100 =  0x7C      =  124
          0000 0101 =  0x05      =  5
OR    ->  0111 1101 =  0x7D      =  125
          1111 1111 =  0xFF      =  255
          1000 1000 =  0x88      =  136
XOR  ->  0111 0111 =  0x77      =  119
</pre>
=The best is yet to come=
=The best is yet to come=
==The nibble==
==Big endian Vs little endian==
==Logical operations==
==Bits and modulo==
==Bits and modulo==

Revision as of 18:28, 28 March 2011


Bit Shifting : how i learned to stop worrying and love binary numbers

Here is how to deal with binary numbers when you are programming on an old computer (Basic V 2.0 on Commodore 64) or when you are configuring internal parameters on your arduino board. Thanks to Mr. Stock who made this nightmare looking almost simple.


What is a bit ?

In the binary numeral system, everything looks like 0110010100010100111...
The bit "is the basic unit of information in computing (Wikipedia)". It can be a 1 or a 0.

Bit weight

In a series of bit, each digit has got a particular weight. Let's take a series of 8 bits :

Series = 01010110

         0   1   0   1   0   1   1   0
Weight : 128 64  32  16  8   4   2   1  

Definitions

A series of 4 bits is called a nibble.
A series of 8 bits is called a byte or octet (2 nibbles).
The first digit -128 in the previous example- is called MSB (Most Significant Bit).
The last digit -1 in the previous example- is called LSB (Less Significant Bit).
You can also talk about MSN (Most Significant Nibble) and LSN (Less Significant Nibble).

Big Endian Vs Little Endian

There are two ways to order the bits. Usually for binary numbers we read from right to left. It is called Little Endian because we read the lower bit first. If we read the higher bit first, it is called Big Endian ordering.

<-- Little Endian
Big Endian --> 


What is << (bit shifting) ?

A bit shift consists in moving one or several digits in a line of 0110010100010100111...

Examples


1 << 3

1 = 0001 in the binary numeral system
1 << 3 means we are gonna move the value 1, to the left <<, 3 times.
1 << 3 : 0001  ->  0010  ->  0100  ->  1000   
               1st move  2nd move  3rd move

1 << 3 = 1000 and 1000 in the binary numeral system = 8


7 << 5

7 = 00000111
7 << 5 : 0000 0111  ->  0000 1110  ->  0001 1100  ->  0011 1000  ->  0111 0000  ->  1110 0000 

7 << 5 = 1110000 in the binary numeral system = 224


Logical operations

Logical operations can be used to set or to clear a bit. For more information about logic gates.

Examples


Using the logical operator & (AND)

RegX = 01110011

RegX & (1 << 3)
0111 0011 AND 0000 1000 = 0000 0000 


Setting a bit with | (OR)

RegX = 01110011

RegX | (1 << 3)
0111 0011 OR 0000 1000 = 0111 1011 


Clearing a bit with & (AND) and NOT

RegY = 01011011
NOT(1 << 3) = 11110111

RegY & NOT(1 << 3)
0101 1011 AND 1111 0111 = 0101 0011  


Operators, Hexadecimal and Decimal


AND, NOT, OR and XOR

Operator  Binary       Hexadecimal  Decimal


          0011 0010 =  0x32      =  50
NOT   ->  1100 1101 =  0xCD      =  205 

          0110 1101 =  0x6D      =  104
          0001 1010 =  0x1A      =  26
AND   ->  0000 1000 =  0x08      =  8
   
          0111 1100 =  0x7C      =  124
          0000 0101 =  0x05      =  5
OR    ->  0111 1101 =  0x7D      =  125

          1111 1111 =  0xFF      =  255
          1000 1000 =  0x88      =  136
XOR   ->  0111 0111 =  0x77      =  119


The best is yet to come

Bits and modulo