Craig Evans
/
1620_Lab2_Task10
Example solution
Diff: main.cpp
- Revision:
- 0:cb82516f2dce
diff -r 000000000000 -r cb82516f2dce main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Feb 02 14:24:48 2017 +0000 @@ -0,0 +1,36 @@ +/* ELEC1620 Lab 2 Task 10 + +Bit-wise Operators + +(c) Dr Craig A. Evans, Feb 2017 + +*/ +#include "mbed.h" + +int main() +{ + char a = 34; // 0010 0010 + char b = 107; // 0110 1011 + printf("a = %i\n",a); + printf("b = %i\n",b); + + printf("We'll shift a by one place to the left and store in c.\n"); + printf("This is the same as multiplying by 2.\n"); + char c = a << 1; // 0100 0100 = 64 + 4 = 68 + printf("c = %i\n",c); + + printf("We'll shift b by fives place to the right and store in d.\n"); + printf("This is the same as dividing by 2^5 = 32.\n"); + char d = b >> 5; // 0000 0011 = 2 + 1 = 3 + printf("d = %i\n",d); + printf("Remember, these are integers so we lose the decimal places.\n"); + + printf("Now we'll set bit 6 of c using the bit-wise OR operation.\n"); + char e = c | (1<<6); // 0100 0100 | 0100 0000 + printf("It turns out bit 6 is already set and so the value doesn't change.\n"); + printf("e = %i\n",e); + + printf("Finally we'll clear bit 2 of c using the bit-wise AND and NOT operation.\n"); + char f = c & ~(1<<2); // 0100 0100 & 1111 1011 = 0100 0000 + printf("f = %i\n",f); +}