Download
bits and bytes n.
Skip this Video
Loading SlideShow in 5 Seconds..
Bits and Bytes PowerPoint Presentation
Download Presentation
Bits and Bytes

Bits and Bytes

181 Views Download Presentation
Download Presentation

Bits and Bytes

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Bits and Bytes

  2. bitwise operators

  3. Recall boolean logical operators in Java… • boolean logical operators: &, |, ^ • not: ! Show truth tables.

  4. Recall boolean logical operators in Java… • boolean logical operators: &, |, ^ • not: ! Also conditional operators: &&, || • Difference between & and &&. • Differences between | and ||. • How can we demonstrate this?

  5. recall bitwise (INTEGER) operators

  6. Bitwise integer operators • HLL such as Java and C/C++ support many bitwise integer operators. • Java: • bitwise: &, ^, |, -, ~ • shift: <<, >>, >>> (Note: C/C++ supports all of the above except >>>.)

  7. Bitwise integer operators • Note: In Java and C/C++ as in Assembler, the bitwise operators can be applied to any of the integer data types (char, short, int, and long). • Note: All of the following examples employ 8-bit (byte) or 16-bit (short) integers but the ideas can and are extended to other integer data sizes. • Note: All of the following examples represent numbers in hex and binary for convenience. These rules apply to decimal numbers as well.

  8. Bitwise & (and)

  9. Bitwise & (and)

  10. Bitwise & (and)

  11. Bitwise & (and)

  12. Bitwise & (and)

  13. Bitwise & (and)

  14. Bitwise | (or)

  15. Bitwise | (or)

  16. Bitwise ^ (xor)

  17. Bitwise ^ (xor)

  18. ~ (1’s complement) • Given 0x3a, what is ~0x3a? • Given 0x0022, what is ~0x0022?

  19. - (2’s complement) • Given 0x3a, what is -0x3a? • Given 0x0022, what is -0x0022?

  20. Shift operators • Left shift: A << B • Signed right shift: A >> B (sign extension) • Unsigned right shift: A >>> B (zero extension) A = value to be shifted B = shift distance

  21. Shift operators Left shift: A << B

  22. Shift operators Signed right shift: A >> B (sign extension)

  23. Shift operators Unsigned right shift: A >>> B (zero extension)

  24. Examples 10 << 1 7 << 3 -1 << 2

  25. Examples 10 << 1 20 7 << 3 56 -1 << 2 -4

  26. Examples 10 >> 1 27 >> 3 -50 >> 2

  27. Examples 10 >> 1 5 0000 1010 >> 1 = 0000 0101 27 >> 3 3 0001 1011 >> 3 = 0000 0011 -50 >> 2 -13 1100 1110 >> 2 = 1111 0011 What is 1111 0011? 0000 1100 + 1 = 0000 1101 = 13 So 1111 0011 = -13 Preserves sign.

  28. Examples -50 >>> 2 0xff >>> 4

  29. Examples -50 >>> 2 51 1100 1110 >>> 2 = 0011 0011 0xff >>> 4 15 1111 1111 >>> 4 = 0000 1111 Does not preserve sign.

  30. Examples byte b = ~12; flags = flags & ~0xf; 10 & 7 if ((flags & 0xf) != 0)

  31. Examples 10 | 7 flags = flags | 0xf; flags |= 0xa; 10 ^ 7 ~0x97

  32. Examples int bits = 1; bits = bits << 1; bits = bits << 2; bits = bits >> 3;

  33. Examples int b1 = 0x65; int b2 = 0xaf; int x = b1 & b2; int y = b1 ^ b2; int z = b1 | b2;

  34. Problem 1 • How can we determine if an int is odd or even?

  35. Problem 2 • Using bitwise operators, write a program in Java that converts an int from its current endian-ness to the other.

  36. Problem 3 • Say class sizes are limited to 32 students. Therefore, I can use the bits in an int to indicate whether or not students took a particular quiz: int quiz1 = 0; // What does this indicate? // How do I indicate that student #7 took the quiz?

  37. Problem 3 • Say class sizes are limited to 32 students. Therefore, I can use the bits in an int to indicate whether or not students took a particular quiz: int quiz1 = 0; // indicate that no one took the quiz quiz1 |= 1 << 7; // indicate that student #7 took the quiz // How do I indicate that student #4 took the quiz?

  38. Problem 3 • Say class sizes are limited to 32 students. Therefore, I can use the bits in an int to indicate whether or not students took a particular quiz: int quiz1 = 0; // indicate that no one took the quiz quiz1 |= 1 << 7; // indicate that student #7 took the quiz quiz1 |= 1 << 4; // indicate that student #4 took the quiz // Oops! Student #7 didn’t take the quiz. Turn it off.

  39. Problem 3 • Say class sizes are limited to 32 students. Therefore, I can use the bits in an int to indicate whether or not students took a particular quiz: int quiz1 = 0; // indicate that no one took the quiz quiz1 |= 1 << 7; // indicate that student #7 took the quiz quiz1 |= 1 << 4; // indicate that student #4 took the quiz quiz1 &= ~(1 << 7); // Oops! Student #7 didn’t take the quiz. Turn it off.

  40. Problem 3 Say class sizes are limited to 32 students. Therefore, I can use the bits in an int to indicate whether or not students took a particular quiz: int quiz1 = 0; // indicate that no one took the quiz quiz1 |= 1 << 7; // indicate that student #7 took the quiz quiz1 |= 1 << 4; // indicate that student #4 took the quiz quiz1 &= ~(1 << 7); // Oops! Student #7 didn’t take the quiz. Turn it off. int quiz2 = 0; // let’s give another quiz! … // indicate students that took quiz 2 // How can we determine if student #4 took both?

  41. Problem 3 Say class sizes are limited to 32 students. Therefore, I can use the bits in an int to indicate whether or not students took a particular quiz: int quiz1 = 0; // indicate that no one took the quiz quiz1 |= 1 << 7; // indicate that student #7 took the quiz quiz1 |= 1 << 4; // indicate that student #4 took the quiz quiz1 &= ~(1 << 7); // Oops! Student #7 didn’t take the quiz. Turn it off. int quiz2 = 0; // let’s give another quiz! … // indicate students that took quiz 2 // determine if student #4 took both final int s7 = 1<<7; if ( (quiz1&s7) != 0 && (quiz2&s7) != 0 ) { … //student 7 took both }

  42. Problem 3 Say class sizes are limited to 32 students. Therefore, I can use the bits in an int to indicate whether or not students took a particular quiz: int quiz1 = 0; // indicate that no one took the quiz quiz1 |= 1 << 7; // indicate that student #7 took the quiz quiz1 |= 1 << 4; // indicate that student #4 took the quiz quiz1 &= ~(1 << 7); // Oops! Student #7 didn’t take the quiz. Turn it off. int quiz2 = 0; // let’s give another quiz! … // indicate students that took quiz 2 // How can we print out all students that took either quiz 1 or quiz 2 // (but not both)?

  43. Problem 3 Say class sizes are limited to 32 students. Therefore, I can use the bits in an int to indicate whether or not students took a particular quiz: int quiz1 = 0; // indicate that no one took the quiz quiz1 |= 1 << 7; // indicate that student #7 took the quiz quiz1 |= 1 << 4; // indicate that student #4 took the quiz quiz1 &= ~(1 << 7); // Oops! Student #7 didn’t take the quiz. Turn it off. int quiz2 = 0; // let’s give another quiz! … // indicate students that took quiz 2 // determine whether a student took either quiz 1 or quiz 2 (but not both) int oneOrTheOther = quiz1 ^ quiz2; // How do we print the students out?

  44. Problem 3 Say class sizes are limited to 32 students. Therefore, I can use the bits in an int to indicate whether or not students took a particular quiz: int quiz1 = 0; // indicate that no one took the quiz quiz1 |= 1 << 7; // indicate that student #7 took the quiz quiz1 |= 1 << 4; // indicate that student #4 took the quiz quiz1 &= ~(1 << 7); // Oops! Student #7 didn’t take the quiz. Turn it off. int quiz2 = 0; // let’s give another quiz! … // indicate students that took quiz 2 // determine whether a student took either quiz 1 or quiz 2 (but not both) int oneOrTheOther = quiz1 ^ quiz2; // print out the students if ( (oneOrTheOther & 1) != 0 ) System.out.println( “one” ); oneOrTheOther >>>= oneOrTheOther; if ( (oneOrTheOther & 1) != 0 ) System.out.println( “two” ); …

  45. End recall

  46. IA32 Bitwise logical instructions

  47. AND

  48. AND • Operation: DEST ← DEST AND SRC; • Flags Affected: • The OF and CF flags are cleared. • the SF, ZF, and PF flags are set according to the result. • The state of the AF flag is undefined.

  49. NEG

  50. NEG (2’s) • Operation: IF DEST = 0 THEN CF ← 0 ELSE CF ← 1; FI; DEST ← – (DEST) • Flags Affected: • The CF flag set to 0 if the source operand is 0; otherwise it is set to 1. • The OF, SF, ZF, AF, and PF flags are set according to the result.