Presentation is loading. Please wait.

Presentation is loading. Please wait.

Bitwise operators.

Similar presentations


Presentation on theme: "Bitwise operators."— Presentation transcript:

1 Bitwise operators

2 Representing integers
We typically think in terms of decimal (base 10) numbers. Why? A decimal (or base 10) number consists of a sequence of decimal digits (0,1,…,9). = 1x x x x100 Least significant digit Most significant digit

3 Representing integers
All numbers within the computer are stored as binary numbers. Why? A binary (or base 2) number consists of a sequence of bits (0,1). =1x25+1x24+0x23+0x22+1x21+1x20 Where does the word “bit” come from? Least significant bit Most significant bit

4 Representing integers
Typical integer sizes: unsigned char = 8 bits unsigned short = 16 bits unsigned int = 32 bits is when stored in an unsigned char is when stored in an unsigned short is when stored in an unsigned int We know that is the same as or

5 Boolean (logical) operators

6 Boolean (logical) operators
&& is and || is or ! is not

7 Boolean (logical) operators
&& is and F && F is F F && T is F T && F is F T && T is T

8 Boolean (logical) operators
|| is or F || F is F F || T is T T || F is T T || T is T

9 Boolean (logical) operators
! is not !F is T !T is F

10 Boolean (logical) operators
^ is xor F ^ F is F F ^ T is T T ^ F is T T ^ T is F

11 Bitwise operators (on integers)

12 Bitwise operators (on integers)
& is bitwise and | is bitwise or ~ is bitwise not (1’s complement) ^ is bitwise xor (exclusive or) Let’s substitute 1 for T and 0 for F.

13 Bitwise operators (on integers)
& is bitwise and (really in an 8-bit byte) & (really ) (really )

14 Bitwise operators (on integers)
| is bitwise or (really in an 8-bit byte) | (really ) (really )

15 Bitwise operators (on integers)
~ is bitwise not (1’s complement) If x= (really in an 8- bit byte) then ~x is

16 Bitwise operators (on integers)
^ is bitwise xor (really in an 8-bit byte) ^ (really ) (really )

17 Other bitwise operators
<< is shift bits to the left. 1 shift to the left is the same as multiplying by 2. Examples 10 << 1 is 20 7 << 1 is 14 7 << 3 is 56 (same as multiplying by 23)

18 Other bitwise operators
>> is shift bits to the right. 1 shift to the right is the same as integer division by 2. Examples 10 >> 1 is 5 27 >> 3 is 3

19 More examples unsigned int ui = 0; ui = 10 & 7; ui = 10 | 7;
unsigned char uc = ~12;

20 Bits as binary flags. An int is 32 bits so we can number each student in the class from If the bit for a particular student is 1, then that indicates that they took a quiz. First, let’s define the students. #define S0 (1<<0) #define S1 (1<<1) #define S2 (1<<2) #define S3 (1<<3) #define S4 (1<<4) . #define S31 (1<<31)

21 Bits as binary flags. Now let’s define a quiz. unsigned int quiz1 = 0;
How can we indicate that students 0, 5, and 9 took quiz 1?

22 Bits as binary flags. Now let’s define a quiz. unsigned int quiz1 = 0;
How can we indicate that students 0, 5, and 9 took quiz 1? quiz1 = (s0 | s5 | s9);

23 Bits as binary flags. Now here comes student 12. He takes the quiz on a subsequent day because he was ill. How do we update quiz1 to indicate that student 12 also took the quiz?

24 Bits as binary flags. Now here comes student 12. He takes the quiz on a subsequent day because he was ill. How do we update quiz1 to indicate that student 12 also took the quiz? quiz1 |= s12;

25 Bits as binary flags. I’d like to write a message that indicates whether or not student 25 took the exam? How can I do that?

26 Bits as binary flags. I’d like to write a message that indicates whether or not student 25 took the exam? How can I do that? if ((quiz1&s25) != 0) puts( “taken” ); else puts( “skipped” ); if ((quiz1&s25) == s25 ) puts( “taken” ); if (quiz1 & s25) puts( “taken” ); OK in Java?

27 Bits as binary flags. Did both students 22 and 25 take the exam?

28 Bits as binary flags. Did both students 22 and 25 take the exam?
if ((quiz1&(s22|s25)) == (s22|s25) ) puts(“taken”); else puts(“skipped”); if ((quiz1&s22)!=0 && (quiz1&s25)!=0) …

29 Bits as binary flags. Did everyone except for student 25 take the exam?

30 Bits as binary flags. Did everyone except for student 25 take the exam? if ( (quiz1&(~s25)) == (~s25) ) puts( “yes” ); else puts( “no” );

31 Bits as binary flags. I thought student 25 took the exam but I was mistaken. How can I rectify my mistake?

32 Bits as binary flags. I thought student 25 took the exam but I was mistaken. How can I rectify my mistake? quiz1 = quiz1 & (~s25); quiz1 &= ~s25;

33 Bits as binary flags. Finally, I’d like to print out a list of all of the students that took exam 1.

34 Bits as binary flags. Finally, I’d like to print out a list of all of the students that took exam 1. int which = 1; for (int i=0; i<32; i++) { ? which <<= 1; }

35 Bits as binary flags. Finally, I’d like to print out a list of all of the students that took exam 1. int which = 1; for (int i=0; i<32; i++) { if (quiz1 & which) //OK in C/C++ only printf( “student %d took the quiz. \n”, i ); which <<= 1; }

36 Bits as binary flags. Say I also have quiz1 and quiz2. I’d like a list of all of the students that took quiz1 or quiz2 but not both.

37 Bits as binary flags. Say I also have quiz1 and quiz2. I’d like a list of all of the students that took either quiz1 or quiz2 but not both. int which = 1; for (int i=0; i<32; i++) { if ( (quiz1&which) ^ (quiz2&which) ) printf( “student %d took either but not both. \n”, i ); which <<= 1; }


Download ppt "Bitwise operators."

Similar presentations


Ads by Google