1 / 22

Homework

Homework. Homework Continue Reading K&R Chapter 2 Questions?. Converting Decimal to Binary. Divide the decimal number successively by 2 and write down the remainder in binary form: e.g. 117 10 117 1 LSB (after divide by 2, remainder =1)

Download Presentation

Homework

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. Homework • Homework • Continue Reading K&R Chapter 2 • Questions?

  2. Converting Decimal to Binary • Divide the decimal number successively by 2 and write down the remainder in binary form: e.g. 11710 117 1 LSB (after divide by 2, remainder =1) 58 0 (after divide by 2, remainder =0) 29 1 (after divide by 2, remainder =1) 14 0 (after divide by 2, remainder =0) 7 1 (after divide by 2, remainder =1) 3 1 (after divide by 2, remainder =1) 1 1 (after divide by 2, remainder =1) 0 0 MSB • Read UP and add any leading 0’s: 01110101 odd even

  3. Converting Decimal to Hex • Method 1: • Convert the decimal number to binary and group the binary digits in groups of 4 e.g. 11710 0111 01012 7516 • Method 2 (shown in HW3): • Divide the decimal number successively by 16 and write down the remainder in hex form: 117 5 LSB (after divide by 16, remainder =5) 7 7 MSB (after divide by 16, remainder =7) • Read UP and add any leading 0’s: 0x75

  4. Converting Binary to Decimal • Treat each bit position n that contains a one as adding 2n to the value. Ignore zeros because they can’t add anything to the value. Bit 0 LSB 1 1 (= 20) Bit 1 0 0 Bit 2 1 4 (= 22) Bit 3 1 8 (= 23) Bit 4 0 0 Bit 5 1 32 (= 25) Bit 6 0 0 Bit 7 MSB 0 0 Total 45

  5. Converting Hex to Decimal • Treat each digit n as adding 16n to the value. Ignore zeros because they can’t add anything to the value. Digit 0 LSB 0 0 Digit 1 2 32 (= 2 * 161) Digit 2 b 2816 (= 11 * 162) Digit 3 0 0 Digit 4 0 0 Digit 5 1 1048576 (= 1 * 165) Digit 6 0 0 Digit 7 MSB 0 0 Total 1051424

  6. Base for Integer Constants • Designating the base for an integer constant • If constant begins with either: 0x It is Hex with a-f as Hex digits 0X It is Hex with A-F as Hex digits • Otherwise, if constant begins with 0 It is Octal • Otherwise, it is decimal

  7. Base for Character Constants • Designating the base for a character constant • If constant begins with either: ‘\x It is Hex with 0-9 and a-f as Hex digits ‘\X It is Hex with 0-9 and A-F as Hex digits • Otherwise, if constant begins with ‘\0 It is Octal • Otherwise, it is the ASCII code for a character ‘a’

  8. Constants • Character and Integer Constants are Signed! • Sign bit (MSB) not set ‘\x55’ equals an 8-bit quantity 01010101 when casted to an int, it equals 0000 … 01010101 0x55 equals a 32-bit quantity 0000 … 01010101 • Sign bit (MSB) set ‘\xaa’ equals an 8-bit quantity 10101010 when casted to an int, it equals 1111 … 10101010 0xaa equals a 32 bit quantity 0000 … 10101010 • Note: None of the ASCII codes (x00 - x7f) have sign bit set!

  9. Signed (Default) Behavior • Careful mixing modes when initializing variables! int i; (signed behavior is default) char c; (signed behavior is default) i = 0xaa; (== 000000aa) as intended i = ‘\xaa’; (== ffff ffaa) sign extends! c = ‘\xaa’; (== aa) as intended i = c; (==ffff ffaa) sign extends! Sign Bit Extension char 1 0101010 int 11111111 11111111 11111111 1 0101010

  10. Unsigned Behavior • Careful mixing modes when initializing variables! unsigned int i; (must specify unsigned if wanted) unsigned char c; (must specify unsigned if wanted) i = 0xaa; (== 000000aa) as intended i = ‘\xaa’; (== ffffffaa) char sign extends! c = ‘\xaa’; (== aa) as intended i = c; (==0000 00aa) char sign not extended! Sign Bit Extension char 1 0101010 int 11111111 11111111 11111111 1 0101010

  11. Example to illustrate signed/unsigned types void copy_characters(void){ char ch; while ((ch =getchar()) != EOF) putchar(ch); } What happens if ch is defined as unsigned char? Is this true? If getchar() == EOF, is this true? No yes Changing the declaration of ch into int ch; makes it work.

  12. One’s ComplementTwo’s Complement • One’s Complement Character Arithmetic ~ is the one’s complement operator ~ flips the value of each bit in the data All zeroes become one, All ones become zero ~ ‘\xaa’ == ‘\x55’ ~10101010 == 01010101 • Number anded with its one’s complement = 0 10101010 & 01010101 00000000

  13. One’s ComplementTwo’s Complement • Two’s Complement Character Arithmetic - is the two’s complement operator • flips the value of each bit in the data and adds 1 It creates the negative of the data value - ‘\x55’ == ‘\xab’ - 01010101 == 10101011 • Number added to its two’s complement = 0 01010101 + 10101011 (1) 00000000 (carry out of MSB is dropped)

  14. Two Special Case Values • char 0 (or zero of any length) -00000000 = 11111111 + 1 = 00000000 • char -27 (or -2n-1 for any length = n) -10000000 = 01111111 + 1 = 10000000

  15. Bit Manipulation • Bitwise Operators: ~ one’s complement (unary not) & and | or ^ xor (exclusive or) << left shift >> right shift • Lots of possible Exam questions here!

  16. Binary Logic Tables AND 0 1 OR 0 1 0 0 0 0 0 1 NOT 1 0 1 1 1 1 0 1 1 0 XOR 0 1 ADD 0 1 0 0 1 0 0 1 0 Carry 1 1 1 0 1 1 Operands Results

  17. Bit Manipulation unsigned char n = ‘\xa6’; n 10100110 ~n 01011001 (1s complement: flip bits) n | ‘\x65’ 10100110 turn on bit in result if | 01100101 on in either operand 11100111

  18. Bit Manipulations n & ‘\x65’ 10100110 turn on bit in result if | 01100101 on in both operands 00100100 n ^ ‘\x65’ 10100110 turn on bit in result if | 01100101 on in exactly 1 operand 11000011

  19. Bit Manipulations n = ‘\x18’; 00011000 (Remember n is unsigned) n << 1 00110000 shift 1 to left (like times 2) n << 2 01100000 shift 2 to left (like times 4) n << 4 10000000 shift 4 to left (bits disappear off left end) n >> 2 00000110 shift 2 to right (like / 4) n >> 4 00000001 shift 4 to right (bits disappear off right end) Unsigned Right Shift 0

  20. Bit Manipulations • Right shift result may be different if n is signed! • If value of n has sign bit = 0, works same as last slide • If value of n has sign bit = 1, works differently!! char n = ‘\xa5’; (default is signed) n 10100101 (sign bit is set) n >>2 11101001 (bring in 1’s from left) • Bringing in extra copies of the sign bit on the left is also called "sign extension" Signed Right Shift

  21. Bit Manipulations • For signed variable, negative value shifted right by 2 or 4 is still a negative value ‘\xa5’ =10100101 ‘\xa5’ >> 2 = 11101001 = ‘\xe9’ • Same result as divide by 4 (22 = 4) • But, this is not true on all machines • See K&R pg. 49, lines 8-10.

  22. Bit Manipulations • When dividing a negative value • Different rounding rules than for positive value • Remainder must be negative - not positive • Note that (-1)/2 = -1 • Note that -(1/2) = 0

More Related