Craig Evans
/
1620_Lab2_Task10
Example solution
main.cpp@0:cb82516f2dce, 2017-02-02 (annotated)
- Committer:
- eencae
- Date:
- Thu Feb 02 14:24:48 2017 +0000
- Revision:
- 0:cb82516f2dce
Initial commit.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
eencae | 0:cb82516f2dce | 1 | /* ELEC1620 Lab 2 Task 10 |
eencae | 0:cb82516f2dce | 2 | |
eencae | 0:cb82516f2dce | 3 | Bit-wise Operators |
eencae | 0:cb82516f2dce | 4 | |
eencae | 0:cb82516f2dce | 5 | (c) Dr Craig A. Evans, Feb 2017 |
eencae | 0:cb82516f2dce | 6 | |
eencae | 0:cb82516f2dce | 7 | */ |
eencae | 0:cb82516f2dce | 8 | #include "mbed.h" |
eencae | 0:cb82516f2dce | 9 | |
eencae | 0:cb82516f2dce | 10 | int main() |
eencae | 0:cb82516f2dce | 11 | { |
eencae | 0:cb82516f2dce | 12 | char a = 34; // 0010 0010 |
eencae | 0:cb82516f2dce | 13 | char b = 107; // 0110 1011 |
eencae | 0:cb82516f2dce | 14 | printf("a = %i\n",a); |
eencae | 0:cb82516f2dce | 15 | printf("b = %i\n",b); |
eencae | 0:cb82516f2dce | 16 | |
eencae | 0:cb82516f2dce | 17 | printf("We'll shift a by one place to the left and store in c.\n"); |
eencae | 0:cb82516f2dce | 18 | printf("This is the same as multiplying by 2.\n"); |
eencae | 0:cb82516f2dce | 19 | char c = a << 1; // 0100 0100 = 64 + 4 = 68 |
eencae | 0:cb82516f2dce | 20 | printf("c = %i\n",c); |
eencae | 0:cb82516f2dce | 21 | |
eencae | 0:cb82516f2dce | 22 | printf("We'll shift b by fives place to the right and store in d.\n"); |
eencae | 0:cb82516f2dce | 23 | printf("This is the same as dividing by 2^5 = 32.\n"); |
eencae | 0:cb82516f2dce | 24 | char d = b >> 5; // 0000 0011 = 2 + 1 = 3 |
eencae | 0:cb82516f2dce | 25 | printf("d = %i\n",d); |
eencae | 0:cb82516f2dce | 26 | printf("Remember, these are integers so we lose the decimal places.\n"); |
eencae | 0:cb82516f2dce | 27 | |
eencae | 0:cb82516f2dce | 28 | printf("Now we'll set bit 6 of c using the bit-wise OR operation.\n"); |
eencae | 0:cb82516f2dce | 29 | char e = c | (1<<6); // 0100 0100 | 0100 0000 |
eencae | 0:cb82516f2dce | 30 | printf("It turns out bit 6 is already set and so the value doesn't change.\n"); |
eencae | 0:cb82516f2dce | 31 | printf("e = %i\n",e); |
eencae | 0:cb82516f2dce | 32 | |
eencae | 0:cb82516f2dce | 33 | printf("Finally we'll clear bit 2 of c using the bit-wise AND and NOT operation.\n"); |
eencae | 0:cb82516f2dce | 34 | char f = c & ~(1<<2); // 0100 0100 & 1111 1011 = 0100 0000 |
eencae | 0:cb82516f2dce | 35 | printf("f = %i\n",f); |
eencae | 0:cb82516f2dce | 36 | } |