CS150 - Fall 2012 - Class 24
administrative
- final exam next week
- either section is fine
- what you can use:
- final exam cheat sheet
- Available on the course web page
- I'll bring copies to the final
- matlab basics handout (you bring it if you want it)
- 2 pages of notes
- besides that, closed book, closed notes, etc.
- if you have special accommodations, e-mail me asap to let me know which exam you're taking and to figure out the details
- final exam review on Friday
number representation
- when you type:
>> x = 17
how does the computer actually store this information, specifically the number 17?
- if you look far enough down into the details of what's going on when you run your computer, almost everything is represented using binary, i.e. some combination of 1's and 0's
- why binary?
- a combination of ease of use and cost
- basic idea: "1" electrical current is flowing, "0" current is not flowing
- transistors can do built to do this efficiently, cheaply and at a extremely small scale
- could do other representations, but this is what is most effective right now... (and has been for a long time)
decimal numbers
- most commonly used number systems have a "base"
- each digit in the number can range from 0...base-1
- each digit in the number has an index, starting at the right-most digit with 0 and working up to the left
- the contribution of the digit is:
base^index * value
- by summing up the contribution of all of the digits, we get the value of the number
- what is the base for our numbering system?
- 10
- for example
- 245 = 5*10^0 + 4*10^1 + 2*10^2
- 80498 = 8*10^0 + 9*10^1 + 4*10^2 + 0*10^3 + 8*10^4
binary numbers
- we can represent numbers using any base we want
- binary numbers are numbers represented as base 2
- digits can only be a 0 or a 1
- for example, the following binary numbers:
- 101 = 1*2^0 + 0*2^2 + 1*2^2 = 5
- 11 = 1*2^0 + 1*2^1 = 3
- 10111 = 1*2^0 + 1*2^1 + 1*2^2 + 0*2^3 + 1*2^4 = 23
- 100001 = 1*2^0 + 1*2^5 = 33
adding binary numbers
- we can add binary numbers, just like we can add decimal numbers
- to do it by hand, think back to how you did it in elementary school...
- start at the right-most digits
- add them together
- if the sum <= base
- that's the value for that digit in the final sum
- if the sum >= base
- then carry a 1 over to the next column and subtract the base from the sum
- the value for that digit is the sum - base
- repeat for each digit
- if there is a 1 carried over, also include that in the sum
- binary addition works the same way:
10111
+ 00101
-----
1
10111
+ 00101
-----
0
11
10111
+ 00101
-----
00
111
10111
+ 00101
-----
100
111
10111
+ 00101
-----
1100
111
10111
+ 00101
-----
11100
- we can check our answer
- 10111 = 1 + 2 + 4 + 16 = 23
- 101 = 1 + 4 = 5
- 11100 = 4 + 8 + 16 = 28
subtracting in binary?
- again, same idea as with decimal
- work right to left
- if the top digit > bottom digit
- subtract the digits and store that as the answer
- if the top digit < bottom digit
- borrow 1 from the next number up (may have to keep looking up)
- ...
- ...
10001
- 1010
------
10001
- 1010
------
1
1
01101
- 1010
------
11
01101
- 1010
------
111
01101
- 1010
------
0111
- and again we can check our answer
- 10001 = 1 + 16 = 17
- 1010 = 2 + 8 = 10
- 111 = 1 + 2 + 4 = 7
how do we represent negative numbers in binary?
- remember, all we have is 1's and 0's (we can't do a negative sign '-')
- one option...
- indicate the sign with the most significant bit
- 0101 = positive 101 = 5
- 1101 = negative 101 = -5
- any concerns with this approach?
- two zeros (both a positive and a negative version)
- 1000
- 0000
- turns out to be more work than other representations
- have to check the sign bit when doing addition or subtraction
- the way most computers do it: twos complement representation
-
http://en.wikipedia.org/wiki/Two's_complement
Course summarized
- look at
bbq.py code
- look at
url_basics.py code
- we've come a long way!
- you've learned how to program
- 3 programming languages
- Python
- R
- Matlab
- Learned to interact with the file system through Terminal
- 4952 lines of notes
- assuming 34 lines per page: 145 pages on notes!
- 1487 lines of code in the examples
- ~110 different functions
- you've written over 1200 lines of code yourself (and probably much more)
- 2/3rds of the book
- ~175 pages of reading
- 21 problem sets