# CS173: Intro to Computer Science - Discrete Data Ranges

# Activity Goals

The goals of this activity are:- To explain that data types are discrete because they are represented by a finite number of computing bits
- To explain that all data are represented computationally via binary values
- To explain the relationship between a data type's bit size and its range
- To explain why typed values take on discrete ranged values that can differ from data type to data type

# The Activity

## Directions

Consider the activity models and answer the questions provided. First reflect on these questions on your own briefly, before discussing and comparing your thoughts with your group. Appoint one member of your group to discuss your findings with the class, and the rest of the group should help that member prepare their response. Answer each question individually from the activity on the Class Activity Questions discussion board. After class, think about the questions in the reflective prompt and respond to those individually in your notebook. Report out on areas of disagreement or items for which you and your group identified alternative approaches. Write down and report out questions you encountered along the way for group discussion.## Model 1: Data Types are Discrete

**Type Name**

**Number of Bits**

**Number of Values that Can Be Stored**

`boolean`

1 bit

2

`int`

32 bits = 4 bytes

\(2^{32}\) = approximately 4 billion values

Each additional bit doubles the number of values that can be stored: all the possible values with a

Each additional bit doubles the number of values that can be stored: all the possible values with a

`1`

appended before them, plus all the possible values with a `0`

appended before them!
`double`

64 bits = 8 bytes

\(2^{64}\) = approximately \(18 \times 10^{18}\) values

`char`

8 bits = 1 byte

\(2^{8}\) = approximately 256 values

`String`

1 byte per character (plus one additional byte at the end which contains the value

`0`

)
Each string is stored in memory with enough space to store all the characters plus the extra byte at the end. In a way, a string holds only one value, made up of its characters. We call strings

**immutable**because we must create a new string to hold new textual data, rather than simply edit the original string variable.### Questions

- Why can’t a computer store data with an infinite number of possible values?
- A
`boolean`

can hold only two values, because its single bit is either a`1`

or a`0`

. To what do these values correspond? - The
`float`

data type is a smaller version of the`double`

; how many bits do you think a`float`

uses? - Similarly, there is a larger version of the
`int`

data type called the`long`

. How many bits do you think this type uses, and how many values can it contain? - Which of the data types above has a variable rather than fixed length? With this in mind, what do you think is the purpose of storing the extra
`0`

at the end of values of that type?

## Model 2: Data Types Have Ranges Because They Are Discrete

**Type Name**

**Number of Bits**

**Number of Values**

**Range**

`boolean`

1 bit

2

`0`

or `1`

`int`

32 bits = 4 bytes

\(2^{32}\)

`-2,147,483,648`

through `2,147,483,647`

`double`

64 bits = 8 bytes

\(2^{64}\)

Approximately \(-1.797 \times 10^{308}\) through \(1.797 \times 10^{308}\), with approximately 15 significant digits of precision

### Questions

- The largest value a
`boolean`

can store is`1`

, even though it is a single bit value that can hold two discrete values. This is because a bit is needed to store the value`0`

. So a`boolean`

’s largest value is not \(2^{1}\), but actually \(2^{1} - 1\). What is the largest int value that a computer can store? - Why can the int data type store more negative values than positive values?
- Suppose you required more precision than the 15 significant digits offered by the double type. What would happen to the range if a double could provide more precision, and why?

## Model 3: Larger Data Types Can Store More Values (Larger Values and More Precise Values)

**Type Name**

**Number of Bits**

**Number of Values**

**Range**

`int`

32 bits = 4 bytes

\(2^{32}\)

`-2,147,483,648`

through `2,147,483,647`

`long`

64 bits = 8 bytes

**???**

**???**

`float`

32 bits = 4 bytes

**???**

Approximately \(-3.402 \times 10^{38}\) through \(3.402 \times 10^{38}\), with approximately 6 significant digits of precision

`double`

64 bits = 8 bytes

\(2^{64}\)

Approximately \(-1.797 \times 10^{308}\) through \(1.797 \times 10^{308}\), with approximately 15 significant digits of precision

### Questions

- Fill in the blanks in the table above.

## Reflective Journal Prompt

- Numeric data types must hold not only positive values but also negative values. What does this do to the number of positive values that can be represented by each type? What are their ranges?