knerr cs21 notes...

back to schedule
```
WEEK02: numbers and strings
---------------------------------------------------------------
F: QUIZ 1, binary numbers, ord/chr and ASCII, use of % operator

LAB2: due next Tuesday

- need to be able to specify different values:
ints: 1 200 -3590
floats: 4.6 -921.6  6.023x10^23
characters: 'a' 'b' 'G'

and we need to be able to do stuff with those values, like
add and subtract them, store and recall them, or apply logical
operations to them (if x is greater than 0, do this)

- computers are good with two values: voltage or no voltage
- let's call these two values 1 and 0

- can we represent ints, floats, and characters with just 1's and 0's?

0                 0
1                 1        bit = binary digit
2                10
3                11
4               100
5               101
6               110
7               111
8              1000
9
10
11

- ASCII encoding for characters:

>>> ord('a')
97
>>> ord('b')
98
>>> chr(99)
'c'
>>> chr(ord('a') + 10)
'k'

- 32-bit integer has it's limits:

>>> x = 2147483647
>>> type(x)
<type 'int'>
>>> x = x + 1
>>> print x
2147483648
>>> type(x)
<type 'long'>

>>> 2**3
8
>>> 2**31
2147483648L

- floating point values: 1 bit for sign (+ or -)
8 bits for range (exponent)
23 bits for precision (fraction)

example: 1.025 x 10^23

sign = +
exponent = 23
fraction = 025

even floats have their limits:

>>> x = 2.0**1023
>>> print x
8.98846567431e+307
>>> x = x * 10
>>> print x
inf

and we don't have infinite precision, so that's why you see
things like this:

>>> 8.2
8.1999999999999993
>>> 1.0/3.0
0.33333333333333331

>>> x = 1000000
>>> dx = 0.000001
>>> dx * x
1.0
>>> for i in range(1000000):
...   x = x + dx
...
>>> print x
1000001.00001

- we can do addition and stuff with binary numbers:

1 + 2 = 3                     2 + 2 = 4

001                            010
+ 010                          + 010
-----                          -----
011                            100

- how do we do this with electric circuits???

> transistor = electrically-controlled switch
> can combine transistors together to make AND, OR circuits

A  B | A and B  |  A or B
-------------------------
0  0      0          0
0  1      0          1
1  0      0          1
1  1      1          1

> can combine AND and OR circuits together to make ADDER circuit

> Pentium II processor (1998) has 7 million transistors!!

** take CS33 if you find this interesting!!

- why is the % operator useful???

#  |  # % 7
------------
4  |    4
5  |    5
6  |    6
7  |    0
8  |    1
9  |    2
.. |   ...
12  |    5
13  |    6
14  |    0
15  |    1

"""
show how to use % operator to loop back to the begining:

today is Friday
the next day is Saturday
the next day is Sunday
"""

def main():

daylist = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]

day = 5
print "today is %s" % (daylist[day])

for i in range(10):
day = (day + 1) % 7
print "the next day is %s" % (daylist[day])

main()

*** Bonus/Fun program...can you use % and ord/chr to do this?

\$ python ccipher.py

This program does a cyclic shift on a phrase you enter.
Please enter a phrase below and a shift value below.

phrase: abcde wxyz
shift: 2

>>>  cdefg yzab

\$ python ccipher.py

This program does a cyclic shift on a phrase you enter.
Please enter a phrase below and a shift value below.

phrase: the jewels are in the garage
shift: 2

>>>  vjg lgygnu ctg kp vjg ictcig

```