1 / 87

Bits and Bytes

Bits and Bytes. bitwise operators. Recall boolean logical operators in Java…. boolean logical operators: &, |, ^ not: ! Show truth tables. Recall boolean logical operators in Java…. b oolean logical operators: &, |, ^ n ot: ! Also conditional operators: &&, ||

remedy
Download Presentation

Bits and Bytes

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

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.

More Related