Jim Williams HONP-112 Week 4 We know a binary digit only has one of two possible values. In the context of a coin toss, a coin also has only 2 possible values - heads (H) or tails (T) If we flipped 2 coins together, how many different ways can they come up? What about if we flipped 3 coins together? How many different possible combinations of H and T are there? Each individual coin can come up in one of 2 possible ways (H or T) If we flip 3 coins together, here are the possible combinations: HHH, HHT, HTH, HTT, THH, THT,TTH,TTT How many combinations is that? We can see that flipping 3 coins, each having 2 possible values, results in 8 possible combinations. Why Is That? Because we must multiply together the possible number of values of each individual coin for each coin we are flipping. We flip 3 coins. Let’s multiply the possibilities for each: ◦ 2 possibilities for coin 1 ◦ x 2 possibilities for coin 2 ◦ x 2 possibilities for coin 3 We end up with 2 x 2 x 2 possible combinations, which is 8. When dealing with a small number of coins we can easily create a table for all the possible combinations. There are three coins so we will have 3 columns. We know the total number of combinations we will have (8). So for the first column, split the result in half – 4 rows of tails, 4 rows of heads. ◦ Note: By convention we usually start the lists with the “0” value – in this case the “tails”. Coin 1 T T T T H H H H Coin 2 Coin 3 Now in the next column, instead of groups of 4, divide that in half so you are working in groups of 2 instead. Alternate T and H as shown : Coin 1 Coin 2 T T T T T H T H H T H T H H H H Coin 3 Now in the next column, instead of groups of 2, divide that in half so you are working in groups of 1 instead. Alternate T and H as shown : Coin 1 Coin 2 Coin 3 T T T T T H T H T T H H H T T H T H H H T H H H As you can see the general rule for the combination table is: First column: Alternate the Tails/Heads (0/1) values in groups of half of your total number of combinations. Each subsequent column: Alternate the Tails/Heads (0/1) values in groups of half of the size of the group from the previous column. In our example of three coins: We had 8 possibilities So, First column: Groups of 4 (8/2): 4 rows of heads, 4 rows of tails. Second column: Groups of 2 (4/2) – alternating groups of heads/tails Third column: Groups of 1 (2/2) – alternating groups of heads/tails Try a combination table of 4 coins now. When we had three coins, there were 8 combinations of tails/tails. As you can see, if we add just one more coin, we now have 16 possible combinations of tails/heads. If you are observant … you will notice we are really adding a column to the left of the existing table – 16 rows long, now we have 8 rows of tails and 8 rows of heads Leave the old table where it is (next to the 8 tails in the new column), and make an entire copy of it in the remaining “empty” rows nest to the heads in the new column! Coin 1 Coin 2 Coin 3 Coin 4 T T T T T T T H T T H T T T H H T H T T T H T H T H H T T H H H Coin 1 Coin 2 Coin 3 Coin 4 H T T T H T T H H T H T H T H H H H T T H H T H H H H T H H H H Likewise, if we added another coin, we would double the combinations to 32, and so on. The possible combinations therefore will increase exponentially (where the exponent is a power of 2 of course) with each single bit added to the mix! Consider this for a moment – would you rather receive a million dollars, or a penny one day and the amount doubled each day for a month? The next time you hear the much overused/misused phrase “increasing exponentially”, keep this in mind and see if someone saying this REALLY means it :-) For our 3-coin example, our total number of possible combinations was 2 x 2 x 2. Does this look familiar? It is 2 to the 3rd power, or 23 Since a coin has only 2 possible values, the general formula for the number of possible of combinations is 2n ◦ n=number of coins So based on our understanding of the coin examples, we can apply the same rule to working with Bits: Given n number of bits: the resulting number of bit pattern combinations is 2n This principle (and its “inverse” discussed later) is the most important thing you need to understand for this lesson, and for this entire course!!! What the bit pattern combinations mean is dependent on the context. But it is important to understand that it is each distinct PATTERN of binary digits that will then be “assigned” to represent a distinct value in human terms. Bit 1 Bit 2 Bit 3 Meaning 1 1 1 Sloth 1 1 0 Greed 1 0 1 Envy 1 0 0 Lust 0 1 1 Anger 0 1 0 Pride 0 0 1 Gluttony 0 0 0 (not used) Bit 1 Bit 2 Bit 3 Meaning 1 1 1 (not used) 1 1 0 Arctic 1 0 1 Antarctic 1 0 0 North Atlantic 0 1 1 South Atlantic 0 1 0 North Pacific 0 0 1 South Pacific 0 0 0 Indian Ocean As you can see the meaning is arbitrary and depends on the list of distinct values I want to find a digital bit pattern to represent. Notice that I “mapped” a list of distinct values to distinct bit patterns. Also notice that in both cases the list was of 7 items, (do you know what they were?) , so I was left with one pattern I did not use. That is fine, and which one to “ignore” is again up to the designer of a system. Remember that this “mapping” is conceptual. We will see an real-life example later on. For now you need to understand the concept. What if we already know how many combinations we WILL need For instance we know we want to have 30 possible patterns? We know that 2n = number of patterns So try to work it out in reverse and get the smallest possible whole number value for n Example: 30 = 2n. Solve for n; but n must be a WHOLE NUMBER. We know that we need n bits to represent 2n different possible patterns. In our example we have 30 possible bit patterns. Let’s try to come up with a number of bits that works. ◦ 4 bits = 24 combinations = 16 (not enough) ◦ 5 bits = 25 combinations = 32 (enough) This is “trial and error” but it works and I recommend you use this method to solve these types of problems. The “technical” way is on the next slide – for informational purposes only… If we already know we need x number of combinations, the “technical” answer to our question of “how many bits do we need” is the base-2 logarithm of the number of combinations. In other words, what power do we need to raise 2 by to get the number of patterns? But in cases where the number of needed patterns is not a whole power of 2, we would have to round up the base-2 logarithm to the next whole number anyway. So use the simpler “trial and error” method instead! If we have a given number of bits (n), know how many possible patterns we have. Be able to write out the patterns. Conversely, if we already know how many patterns we will need, then know how to find the smallest possible number of bits so that 2n gets us an answer greater than or equal to the number of patterns. The term “digital” means that we are dealing with electronics that only understand two distinct “states” – high/low, on/off, 1/0, etc. Therefore anything we wish to represent digitally must be converted to various patterns of 1/0. The computer will “understand” what these patterns mean and handle them accordingly. Analog means that we are dealing with electronics that can understand an infinite number of “states”, or values. Unlike digital signals and media (consisting only of discrete values), analog technology can reproduce a continuous set of values. An analog way to represent music is a phonograph record. Grooves cut into the record is analogous to the sound waves of the music. A record groove is a continuous line, and there are an infinite number of points on a line. A digital way to represent music is an audio file. But we cannot store an infinite number of values, so instead of a “line” we have many discrete “points” instead, each containing a set number of digits which represent different values. See below. Notice the digital signal only has two possible values. FYI it is not really a continuous line. But it appears that way because there are more changes per second than the scope can show (you don’t have to know what all that means…) Remember that neither analog nor digital is “reality.” For instance, a 35mm film photograph (analog), or a JPEG file of a picture (digital) is not REALLY the scene you captured. Both are only representations of that reality. Keep this point in mind throughout the rest of this course. We now know that a computer works exclusively with binary numbers. In other words, it must understand human information in terms of digital electronics (“on” or “off”) Digital Representation - or digitizing - is when we represent human information as binary digits. A computer has its own set of “rules” about how different kinds of information may represented digitally. These rules may be different for different types of computers. The designers of a computer make the decision about how this is done. We will not get into the technical aspects of how this is done yet – but we will study the functional/analytical aspects. Almost any piece of human information can be digitized. ◦ ◦ ◦ ◦ ◦ ◦ Books, papers, and other written works A checkbook register Customer purchase records Music Photographs etc. Several things are necessary to come up with a way to digitize human information: ◦ 1. An full understanding of what the information is ◦ 2. Finding the smallest meaningful piece of information that the rest is built upon. ◦ 3. How many possible “values” the smallest meaningful pieces of information can have. After we know this, we can design a way to represent each of these different values using combinations of bits. Then string them all together to have a complete representation of the full set of information (photo, written document, song, etc.). When digitizing, we must think of our information in the smallest possible terms. Then, we can find a way to digitally represent each small piece of information. Combining these small digital representations gives us our complete digitization of the whole information. This step is the most important, and has nothing to do with computers. In the next few slides, we will try to break a piece of information into its parts. Then, we can see what we need to do to digitize the information. As you can see the most important part of designing a way to digitize information is the analysis phase. This is where we do our thinking, discovery, and understanding of whatever it is we are trying to digitally represent. For instance, if we were developing a way to digitally represent musical notes, and did not know how many musical notes there were, we would fail. Let’s take a piece of human information we should all be familiar with – the written word (i.e. a paper, book, article, etc.). We want to come up with a way to represent this type of information in a digital form. Think a while - what does a written paper consist of? Assume the paper is written in the English language. A written paper consists of paragraphs. Each paragraph consists of sentences. Each sentence consists of words. Each word consists of letters. We cannot break the written word down any further than this. (A letter is not built up out of anything smaller.) So, let’s start with finding out how many possible “values” a letter has. We have to allow for any possible letter to be used in the paper. The English language consists of 26 different letters. However, each letter can be of upper or lower case. So now we have to account for 52 different letters. So far, we have determined that we have to account for 52 different letters. We will ignore other things that may be in a written paper for now (can you think of any?) If we can figure out a way to digitize each letter, then we can put them all together and digitize the entire paper. We must come up with a way to digitally represent a single small piece of information in 52 different possible ways. Remember - this means that we represent the information using binary digits (bits). So we need to define 52 different PATTERNS of 1s and 0s – and each of these patterns will be “assigned” to each of the corresponding possible values. How many bits do we need to do this? We know that we need n bits to represent 2n different possible values. We have 52 possible values for each letter. Let’s try to come up with a number of bits that works. ◦ 4 bits = 24 combinations = 16 (not enough) ◦ 5 bits = 25 combinations = 32 (not enough) ◦ 6 bits = 26 combinations = 64 (this works!) We determined that there are 52 possible values for a single letter. We also discovered that we need 6 bits to represent these 52 possible values. With this information, we can now represent our human information (letters) as binary digits that the computer can understand. We will take the bit patterns and assign them to each possible value for a letter. Of course, the computer must be “told” how to interpret the patterns. Of course, in real life, there are other characters besides letters ◦ punctuation marks, spaces, tabs, page breaks ◦ Number characters ◦ other “odd” characters (Greek letters, etc.) So most computers use a sequence of 8 bits to represent characters - allowing for 256 (or 28) different values. Research the “Extended-ASCII” chart. It shows the real 8-bit patterns that are assigned to characters. Of course the computer is designed to understand this scheme. Originally only 7 bits were used per character (the original ASCII scheme). Then one extra bit was added, and this doubled the total number of possible patterns from 128 to 256 (remember about increasing exponentially??). Maybe you still don’t think 256 possible characters is enough patterns??? Others have addressed this – see “Unicode” for more information. As you know, a bit is a single binary digit. In computers, we sometimes think of a group of 8 binary digits as a single binary number. A group of 8 binary digits is called a Byte. A byte example: 10010101 Most of the time, we measure things in Bytes, not bits. So one can say that characters in most modern computers are represented by a one-byte code (as opposed to 8-bit code). Sometimes you will see things referred to in terms of bytes, and other times you will still see reference to bits instead (especially when marketing people want their computer’s features to appear “bigger”). Just know that there are 8 bits to a byte, or conversely there are 1/8 bytes to a bit. Example: I have a 24-bit pattern, please express this in bytes. Example: How many bits are contained in a 4-byte pattern? Consider the byte 01110101 Depending on the context, this may possibly represent either of these: ◦ The quantity 117 (read as a base-2 number) ◦ The Extended-ASCII character for the letter “u” (look it up on the chart) ◦ Possibly other types of things we will discuss later So, saying “it depends on the context” is not a “cop-out.” Since the computer can ONLY represent two possible values, we have to know the context because the same combinations of 1s and 0s mean something completely different (as per our example above). You are asked to design a way to digitally represent a piece of sheet music. What is the process to design a digital representation of this? What does a musical score on paper consist of? How could it be broken down? How many different contexts may you need within the SAME piece of information? This is NOT a music theory class and the following information will not be complete. I am providing this as an interactive exercise. I am trying to illustrate how vitally important it is to fully understand what it is we are designing a digital representation for – BEFORE we actually do anything with computers. Also – this is only a THEORETICAL exercise. It does not represent any real-life music encoding system! A musical score is made up of staves, which are made up of bars, which are made up of notes. For now let’s only consider a single staff. There are 12 possible musical pitches that can be represented on a staff. (Name them) These 12 pitches repeat in octaves. So for instance you can have an “A” note in one octave and also an “A” note an octave higher, 2 octaves lower, etc. So how many octaves would we need to represent?? There is also a special “note” called a “rest” which means silence. Notes are maintained for a certain DURATION – i.e. how long is the note held over some interval of time? There are different types of notes (which are all powers of 2 by the way!) that specify this. The piece of music itself is also in a “time signature” which in layman’s terms defines the context for the duration of the notes.. So far, we know we need to represent 12 possible values (each basic note value) and a special value for a “rest” so that makes 13. Also we need to represent each of the “types” of notes based on duration (full, half, quarter, eighth, etc.). How many types of notes do you want to represent? How would you represent them? We need to decide how many octaves of notes we want to represent as well and come up with a way to assign them bit patterns. Then we have things like “dotted” notes, ties, slurs, repeat marks, key signature changes, etc. Just something to think about. How would you design something like this? Let’s just try the notes themselves: This will form the basis of our system If we want to represent 12 different note values (well actually 13 including the “rest”), how many bits do we need? 23 – 8: not enough patterns 24 – 16 – that is enough. We will use 13 of the patterns and just not use the remaining patterns for anything else in this context. So we know we will use bit patterns that are 4bits long. We will determine these possible combinations and assign the patterns to a note. Bit 1 Bit 2 Bit 3 Bit 4 What it represents 0 0 0 0 rest 0 0 0 1 A note 0 0 1 0 A#/Bb note 0 0 1 1 B note 0 1 0 0 C note 0 1 0 1 C#/Db note 0 1 1 0 D note 0 1 1 1 D#/Eb note Bit 1 Bit 2 Bit 3 Bit 4 What it represents 1 0 0 0 E note 1 0 0 1 F note 1 0 1 0 F#/Gb note 1 0 1 1 G note 1 1 0 0 G#/Ab note 1 1 0 1 (not used) 1 1 1 0 (not used) 1 1 1 1 (not used) Now that we designed a way to represent all the different pitches/notes, we can come up with other schemes to represent: ◦ Note durations ◦ Octave numbers ◦ Other things… Each of these would be considered a separate context and the system would need to know how to interpret these bit patterns in the proper context. I’ll leave it up to you to expand the design further and come up with a way to “string” the values together to create a music score. As you see … it is not easy to break down information so it can be represented digitally. It is not so much the mechanics as it is developing a full understanding of the information at hand. Sometimes, computer people get involved with designs without the involvement of subject matter experts – and that is one reason for faulty systems. But luckily for us, most design work for common applications has already been done and is available for us to use in tried and true systems. We have been studying the difference between human information and its digital representation. We have only discussed various ways to represent information using combinations of bits, and the conceptual process to accomplish this.. But we did not discuss the technical aspects of how real human information is actually converted to bits using , and vice-versa. We will study that more in future lessons. It is important that you just grasp the concept for now. To digitize conceptually, we follow these steps Understand the information Break the information down into smallest parts. Determine how many possible values there are for the small part. determine the n, where 2n can accommodate the number of possible values. ◦ “Map” a bit pattern to each of the possible values we want to represent ◦ String these values together to create an entire digital representation of the data. ◦ ◦ ◦ ◦ Realize same bit patterns can mean different things in different contexts. Be able to refer to digital data in terms of bits or bytes. Given a “simple” context, be able to determine the possible values and “map” these to bit combinations (test questions will be simpler than our music example!).