csc 2400 computer systems
play

CSC 2400: Computer Systems Bit-Level vs. Logical Operators Review - PowerPoint PPT Presentation

CSC 2400: Computer Systems Bit-Level vs. Logical Operators Review Addition q 2s complement addition is just binary addition - assume all integers have the same number of bits - for now, assume no overflow 01101000 (104) 11110110 (-10) +


  1. CSC 2400: Computer Systems Bit-Level vs. Logical Operators

  2. Review – Addition q 2’s complement addition is just binary addition - assume all integers have the same number of bits - for now, assume no overflow 01101000 (104) 11110110 (-10) + 11110000 (-16) + (-9) 01011000 (88) (-19) Assume 8-bit 2’s complement numbers.

  3. Review – Sign Extension q To add two numbers, we must represent them with the same number of bits. q If we just pad with zeroes on the left NOT GOOD! ) : 4-bit 8-bit 0100 (4) 00000100 (still 4) 1100 (-4) 00001100 ( 12, not -4; NOT GOOD! ) q Instead, replicate the sign bit to the left: 4-bit 8-bit 0100 (4) 00000100 (still 4) 1100 (-4) 11111100 (still -4)

  4. Review – Memory and Variables char c = ‘A’; 01000001 char c = 65; 01000001 char c = 0x41; 01000001 int i = 258; 00000000 00000000 00000001 00000010 int i = 0x102; 00000000 00000000 00000001 00000010 int j = 0xF0A2; 00000000 00000000 11110000 10010010

  5. Bit-Level Operators Common to C and Java &, |, ~, ^, <<, >>

  6. Bitwise Operators ~ Bitwise NOT “ flips ” bits & Bitwise AND 1 if both operands are 1 | Bitwise OR 0 if both operands are 0 ^ Bitwise XOR 0 if operands are equal << Bitwise Left Shift shifts bits to the left >> Bitwise Right Shift shifts bits to the right • Apply to any “integral” data type: long , int , short , char • View arguments as bit vectors • Arguments applied bit-wise

  7. Bitwise Operators ~ A A B A&B A|B A^B A^A 0 0 0 1 1 0 1 1

  8. NOT (~) Example Input 1 0 1 1 0 1 0 0 0xB4 ~Input 0x___

  9. AND (&) and OR (I) and XOR (^) Examples A 1 0 1 1 0 1 0 0 0xB4 B 0 1 1 0 1 0 1 1 0x___ A & B 0x___ A | B 0x___ A ^ B 0x___ A ^ A 0x___

  10. AND (&) and OR (I) and XOR (^) Examples 0x69 & 0x55 --> 0x______ 0x69 | 0x55 --> 0x______ 0x69 ^ 0x55 --> 0x______

  11. Bitmasks q Used to change or query one or more bits in a variable q The bitmask indicates which bits are to be affected q Common operations: - Setting one or more bits to 1 - Setting one or more bits to 0 - Reading one or more bits

  12. Bitmasks – set single bit to 1 q Assume that data is an integer variable (size is unknown) q Set the least significant bit of data to 1 (other bits are unchanged) data 1 0 1 1 0 1 0 ? mask result wanted 1 0 1 1 0 1 0 1 q C statement: data | 1 data = _______________________;

  13. Bitmasks – set multiple bits to 1 q Assume that data is an integer variable (size is unknown) q Set bit 0, 2 and 3 of data to 1 (leave the other bits unchanged): data 1 0 1 1 ? ? 0 ? mask result wanted 1 0 1 1 1 1 0 1 q C statement: data | 0xD data = _______________________;

  14. Bitmasks – set byte to 0xFF q Assume that data is an integer variable (size is unknown) q Set the least significant byte of data to 0xFF data 1 0 1 1 0 0 0 1 ? ? ? ? ? ? ? ? mask result wanted 1 0 1 1 0 0 0 1 1 1 1 1 1 1 1 1 q C statement: data | 0xFF data = _______________________;

  15. Bitmasks – set another byte to 0xFF q Assume that data is an integer variable (size is unknown) q Set the 2 nd least significant byte of data to 0xFF data ? ? ? ? ? ? ? ? 1 0 1 1 0 0 0 1 mask result wanted 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 1 q C statement: data | 0xFF00 data = _______________________;

  16. Bitmasks – clear (set to 0) single bit q Assume that data is an integer variable (size is unknown) q Set the least significant bit of data to 0: data 1 0 1 1 0 1 1 ? mask result wanted 1 0 1 1 0 1 1 0 q C statement: data & ~1 data = _______________________;

  17. Review – Common Bit Operations q Set one or more bits to 1 q Set one or more bits to 0 q Read one or more bits

  18. Review – What Does This Code Do? int data = ...; data = data | 0x1; data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | 0x1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 result ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 q Answer: - Set the least significant bit to 1

  19. Review – What Does This Code Do? int data = ...; data = data | 0x4; data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | 0x4 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 result ? ? ? ? ? ? ? ? ? ? ? ? ? 1 ? ? bit 2 bit 1 bit 0 q Answer: - Set bit 2 (third least significant bit) to 1

  20. Review – What Does This Code Do? int data = ...; data = data | 0xF; data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | 0xF 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 result ? ? ? ? ? ? ? ? ? ? ? ? 1 1 1 1 bit 3 bit 2 bit 1 bit 0 q Answer: - Set the four least significant bits to 1

  21. Review – What Does This Code Do? int data = ...; data = data & ~0x1; data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? & ~0x1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 result ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0 bit 0 q Answer: - Clear the least significant bit (set it to 0)

  22. Bitmasks – clear (set to 0) multiple bits q Assume that data is an integer variable (size is unknown) q Clear (set to 0) bits 0, 2 and 4 of data (other bits are unchanged): data 1 0 1 ? 0 ? 1 ? mask result wanted 1 0 1 0 0 0 1 0 q C statement: data & ~0x15 data = _______________________;

  23. Bitmasks – clear (set to 0) single byte q Assume that data is an integer variable (size is unknown) q Clear (set to 0) the least significant byte of data data 1 0 1 1 0 0 0 1 ? ? ? ? ? ? ? ? mask result wanted 1 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 q C statement: data & ~0xFF data = _______________________;

  24. Feedback Results q Review Topics (Today) q Ungraded Practice Quizzes (1/week) q Review Homework q More Hands-on/Labs/C Programming (Coming Up) q Teaching - Slow Down - Explain Jargon - Step-by-step Examples q When post slides?

  25. Bitmasks – clear (set to 0) multiple bytes q Assume that data is an integer variable (size is unknown) q Clear (set to 0) bytes 0 and 1 of data data ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? mask result wanted 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 q C statement: data & ~0xFFFF data = _______________________;

  26. Bitmasks – read bit q Assume that data is an integer variable (size is unknown) q Determine the least significant bit of data: data 1 0 1 1 0 1 0 ? mask result wanted 0 0 0 0 0 0 0 ? q C statement: data & 1 result = _______________________;

  27. Bitmasks – read another bit q Assume that data is an integer variable (size is unknown) q Determine the 2 nd least significant bit of data: data 1 0 1 1 0 1 ? 1 mask result wanted 0 0 0 0 0 0 0 ? q Need to shift

  28. Bitwise Operator: Left Shift << q Left shift: A << n (same as multiply by 2 n ) - Shift the bit-vector A to the left by n bits - Leftmost n bits are lost; rightmost n bits become 0 A 1 0 1 1 0 1 0 0 0xB4 A << 3 1 0 1 0 0 0 0 0 0x___

  29. Bitwise Operator: Right Shift >> q Right shift: A >> n (same as divide by 2 n ) - Shift the bit-vector A to the right by n bits - Rightmost n bits are lost; what about leftmost n bits? char A; 1 0 1 1 0 1 0 0 0xB4 A >> 3 1 1 1 1 0 1 1 0 0x___ char A; 0 0 1 1 0 1 0 0 0x34 A >> 3 0 0 0 0 0 1 1 0 0x___ q Uses sign extension for signed types

  30. Bitwise Operator: Right Shift >> unsigned char A; 1 0 1 1 0 1 0 0 0xB4 A >> 3 0 0 0 1 0 1 1 0 0x___ unsigned char A; 0 0 1 1 0 1 0 0 0x34 A >> 3 0 0 0 0 0 1 1 0 0x___ q Insert 0 to the left for unsigned types Note: Java has the unsigned shift operator >>> (not available in C)

  31. Bitmasks – revisit example q Determine the 2 nd least significant bit of data (size unknown): data 1 0 1 1 0 1 ? 1 data >> 1 ? mask result wanted 0 0 0 0 0 0 0 ? q C statement: (data >> 1) & 1 result = _______________________;

  32. Bitmasks – read another bit q Determine the 4 th least significant bit of data (size unknown): data 1 0 1 ? 0 1 0 1 result 0 0 0 0 0 0 0 ? q C statement: (data >> 4) & 1 result = _______________________;

  33. Bitmasks – read byte q Assume that data is an integer variable (size is unknown) q Determine the 2 nd least significant byte of data data ? ? ? ? ? ? ? ? 1 0 1 1 0 1 0 1 result 0 0 0 0 0 0 0 0 ? ? ? ? ? ? ? ? q C statement: (data >> 8) & 0xFF result = _______________________;

  34. Bitwise Operators q Write code to print all the bits of a character from left to right (starting with the most significant bit): 1 0 1 1 0 1 0 1 char c = 0xB5; void print_binary(char c) { /* add code here */ }

  35. Relations Between Operations q DeMorgan’s Laws - Express & in terms of |, and vice-versa o A & B = ~(~A | ~B) • A and B are true if and only if neither A nor B is false o A | B = ~(~A & ~B) • A or B are true if and only if A and B are not both false q Exclusive-Or using Inclusive Or o A ^ B = (~A & B) | (A & ~B) • Exactly one of A and B is true o A ^ B = (A | B) & ~(A & B) • Either A is true, or B is true, but not both

  36. Why Bitwise Operators?

  37. Used in Networking

  38. Used in Encryption/ Decryption

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend