# 15-122: Principles of Imperative Computation

advertisement ```15-122: Principles of Imperative Computation
Recitation 3
Section C
September 5, 2012
Office Hours
Tuesdays from 7:00 to 9:00 PM, GHC 4122/26
Come with questions about class, homework, life. . .
TA
Carsten
Josh
Jonathan
Kyle
Alex
Nivedita
Bill
Klas
Ryan
Room
GHC 6505
GHC 4102
GHC 5709
GHC 4122/26
”
”
”
”
”
Time
Thu 1:00 - 3:00
Wed 6:00 - 8:00
Wed 1:30 - 2:30, Fri 1:30 - 2:30
Fri 2:30-4:30
Tue 4:30-5:30, Thurs 4:30-5:30
Wed 3:30-4:30, Fri 3:30 - 4:30
Tue 3:00 - 4:00, Thu 3:00 - 4:00
Thu 7:30 - 9:30
Mon 3:00 - 4:00
CA
Arjun
Elliot
Kathy
Ling-Yi
Maria
Room
GHC 5201
”
”
”
”
Time
Mon 6:00 - 8:00
Sun 6:00 - 8:00
Thu 10:00 - midnight
Wed 8:30 - 10:30
Tue 6:00 -8:00
Binary Representation
Our familiar numerical system is known as base-10. 10 unique digits: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
348210 = (3 &times; 103 ) + (4 &times; 102 ) + (8 &times; 101 ) + (2 &times; 100 )
Computers use a base-2 numeral system. 2 unique digits: 0, 1
2710 = 110112 = (1 &times; 24 ) + (1 &times; 23 ) + (0 &times; 22 ) + (1 &times; 21 ) + (1 &times; 20 )
Conversion - Decimal to Binary:
Let n be a number in base-10 with binary representation nk nk−1 . . . n1 n0 .
Method 1: Division with remainder
i
0
1
&middot;&middot;&middot;
k−1
k
n
2i
Method 2: Power Table
2k
nk
remainder
n0
n1
&middot;&middot;&middot;
nk−1
nk
n
n
2
&middot;&middot;&middot;
n
2k−1
n
2k
2k−1
&middot;&middot;&middot;
i
&middot;&middot;&middot;
20
Test
2k ≤ n
nk 2k + 2k−1 ≤ n
nk−1
..
.
&middot;&middot;&middot;
ni
nk
..
2k
+ nk−1
.
n0
(
2k−1
+ &middot; &middot; &middot; + 2i ≤ n
&middot;&middot;&middot;
i
0
i=1 ni 2 ) + 2 = n
Pk
Modular Arithmetic
Suppose we have 4-bit integers. Then there are 24 = 16 numbers we can represent: 0000, 0001, . . . , 1110, 1111. That’s
the interval [0, 15]. Let’s do some simple math:
+
1
0
1
0
1
1
1
0
1
0
1
1
(10)
(5)
(15)
-
01
10 1
10
0
0
1
1
1
1
1
1
0
(13)
(7) Awesome. Things seem to work as expected.
(6)
But what if our operations go outside [0, 15]?
11
+
1
0
0
1
1
0
0
1
1
1
0
1
(13)
(6) We’re dealing with 4-bit ints; there’s no room for the fifth bit.
(19)
11
So we just chop it off and look at the 4 lowest bits. +
(1)
0
0
1
1
0
0
1
1
1
0
1
(13)
(6)
(3)
We’re working mod 24 , so our values can’t be greater than 15. In general, if you have k bits, the highest number you
can represent is 2k − 1.
The following properties are true for arithmetic on integers modulo some number n:
Addition
Multiplication
x+y =y+x
x∗y =y∗x
(commutativity)
(x + y) + z = x + (y + z) (x*y)*z = x*(y*z)
(associativity)
x+0=x
x∗1=x
(application of identity)
x + (−x) = 0 (additive inverse)
x ∗ (y + z) = x ∗ y + x ∗ z (distributivity)
−(−x) = x (cancellation)
x ∗ 0 = 0 (annihilation)
2’s Complement Arithmetic
Looking again at our 4-bit numbers, we decided that they span [0, 15]. But what about negative numbers?
Let’s look at the 4 bits a little differently. Let the most significant (leftmost) bit carry a negative weight.
Then n3 n2 n1 n0 = (n3 ∗ (−1) ∗ 23 ) + (n2 ∗ 22 ) + (n1 ∗ 21 ) + (n0 ∗ 20 ). What are the numbers we have?
0000 (0)
1111 (-1)
0001 (1)
1110 (-2)
0010 (2)
1101 (-3)
0011 (3)
1100 (-4)
0100 (4)
1011 (-5)
0101 (5)
1010 (-6)
0110 (6)
1001 (-7)
0111 (7)
1000 (-8)
Things to note:
1. -0 = 0 : we didn’t lose this property when changing the way we interpret things.
2. min int = -8, max int = 7 : the min negative number has a greater magnitude than the max positive number
3. −x = (∼ x) + 1 : To get −x from x, you flip all the bits of x and then add 1.
4. −min int = min int : the negative of the minimum expressible number is itself.
Hexadecimal
Back to representations - hexadecimal, or base-16, is another numerical system computers use.
16 unique digits: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f
If n = nk nk−1 . . . n1 n0 is a hex number, then n = (nk &times; 16k ) + (nk−1 &times; 16k−1 ) + . . . + (n1 &times; 161 ) + (n0 &times; 160 )
16 is kind of a clunky number to work with. Thankfully, we’ve got a nicer way of looking at these hex numbers. Each
hex digit can range from 0 to 16. That’s the span of 4 bits. Let’s explore that idea:
hex
2
3
d
1
9
4
f
6
binary 0010 0011 1101 0001 1001 0100 1111 0110
Then 23d194f616 = 001000111101000110010100111101102
```