diff options
| author | Marti Bolivar <mbolivar@mit.edu> | 2010-12-21 10:27:37 -0500 | 
|---|---|---|
| committer | Marti Bolivar <mbolivar@mit.edu> | 2010-12-21 10:27:37 -0500 | 
| commit | c45bccad44187da27505cf5808424e709e3f54a1 (patch) | |
| tree | 18a459a50f8d0551ba046e30462c93999d982725 /docs/source/arduino/bitshift.rst | |
| parent | 84fd2532a7f23d20354ff590790b3f892cb7e7d7 (diff) | |
| parent | d5ad2a27f4e69e6cc9324331945937c983c30366 (diff) | |
| download | librambutan-c45bccad44187da27505cf5808424e709e3f54a1.tar.gz librambutan-c45bccad44187da27505cf5808424e709e3f54a1.zip | |
Merge branch 'master' into debug-serialusb.
Chose debug-serialusb version in cases of conflict.
Conflicts:
	libmaple/usb/usb_callbacks.c
Diffstat (limited to 'docs/source/arduino/bitshift.rst')
| -rw-r--r-- | docs/source/arduino/bitshift.rst | 127 | 
1 files changed, 0 insertions, 127 deletions
| diff --git a/docs/source/arduino/bitshift.rst b/docs/source/arduino/bitshift.rst deleted file mode 100644 index f59b489..0000000 --- a/docs/source/arduino/bitshift.rst +++ /dev/null @@ -1,127 +0,0 @@ -.. _arduino-bitshift: - -bitshift left (<<), bitshift right (>>) -======================================= - -Description ------------ - -From *The Bitmath Tutorial* in The Playground - - - -There are two bit shift operators in C++: the left shift operator -<< and the right shift operator >>. These operators cause the bits -in the left operand to be shifted left or right by the number of -positions specified by the right operand. -More on bitwise math may be found -`here. <http://www.arduino.cc/playground/Code/BitMath>`_ - - - -Syntax ------- - -variable << number\_of\_bits - - - -variable >> number\_of\_bits - - - -Parameters ----------- - -variable - (byte, int, long) number\_of\_bits integer <= 32 - - - -Example: --------- - -:: - -        int a = 5;        // binary: 0000000000000101 -        int b = a << 3;   // binary: 0000000000101000, or 40 in decimal -        int c = b >> 3;   // binary: 0000000000000101, or back to 5 like we started with - - - -When you shift a value x by y bits (x << y), the leftmost y bits in -x are lost, literally shifted out of existence: - - - -:: - -        int a = 5;        // binary: 0000000000000101 -        int b = a << 14;  // binary: 0100000000000000 - the first 1 in 101 was discarded - - - -If you are certain that none of the ones in a value are being -shifted into oblivion, a simple way to think of the left-shift -operator is that it multiplies the left operand by 2 raised to the -right operand power. For example, to generate powers of 2, the -following expressions can be employed: - - - -:: - -        1 <<  0  ==    1 -        1 <<  1  ==    2 -        1 <<  2  ==    4 -        1 <<  3  ==    8 -        ... -        1 <<  8  ==  256 -        1 <<  9  ==  512 -        1 << 10  == 1024 -        ... - - - -When you shift x right by y bits (x >> y), and the highest bit in x -is a 1, the behavior depends on the exact data type of x. If x is -of type int, the highest bit is the sign bit, determining whether x -is negative or not, as we have discussed above. In that case, the -sign bit is copied into lower bits, for esoteric historical -reasons: - - - -:: - -        int x = -16;     // binary: 1111111111110000 -        int y = x >> 3;  // binary: 1111111111111110 - - - -This behavior, called sign extension, is often not the behavior you -want. Instead, you may wish zeros to be shifted in from the left. -It turns out that the right shift rules are different for unsigned -int expressions, so you can use a typecast to suppress ones being -copied from the left: - - - -:: - -        int x = -16;                   // binary: 1111111111110000 -        int y = (unsigned int)x >> 3;  // binary: 0001111111111110 - - - -If you are careful to avoid sign extension, you can use the -right-shift operator >> as a way to divide by powers of 2. For -example: - - - -:: - -        int x = 1000; -        int y = x >> 3;   // integer division of 1000 by 8, causing y = 125. - - | 
