P3-M 4/21 Binary Overview - Lina Awad Hack's
A series of binary lessons focusssed on math and conversions.
How to contact us
Join the "coding" channel on slack! That is the only place where we will be answering questions or sending announcements about lessons. If you have a question please contact us there.
How to join
- Click on "add channels" below the list of channels
- Click on "browse channels"
- Search for "coding"
- Click the green "Join" button on the right
Learning Objectives

DAT-1.A: Representing Data with Bits
Basic Information
- Bit is short for __binary digit, and represents a value of either 0 or 1.
- A byte is 8 bits.
- Sequences of bits are used to represent different things.
- Representing data with sequences of bits is called _abstraction__.
Practice Questions:
- How many bits are in 3 bytes?
- There are 24 bits in 3 bytes
- What digital information can be represented by bits?
- numbers and text. Choices like yes or no, on or off, etc. Bits can represent different forms of text and how it works.
- Are bits an analog or digital form of storing data? What is the difference between the two?
- bits are a digital form of storing data. This difference is that digital is only either 1 or 2, not anything else, and analog can be more.
Examples
- Boolean variables (true or false) are the easiest way to visualize binary.
- 0 = False
- 1 = True
import random
def example(runs):
# Repeat code for the amount of runs given
while runs > 0:
# Assigns variable boolean to either True or False based on random binary number 0 or 1.
boolean = False if random.randint(0, 1) == 0 else True
# If the number was 1 (True), it prints "awesome."
if boolean:
print("binary is awesome")
# If the number was 2 (False), it prints "cool."
else:
print("binary is cool")
runs -= 1
# Change the parameter to how many times to run the function.
example(10)
DAT-1.B: The Consequences of Using Bits to Represent Data
Basic Information
- Integers are represented by a fixed number of bits, this limits the range of integer values. This limitation can result in overflow or other errors.
- Other programming languages allow for abstraction only limited by the computers memory.
- Fixed number of bits are used to represent real numbers/limits
Practice Questions:
- What is the largest number can be represented by 5 bits?
- 1 + 2 + 2^2 + 2^3 + 2^4 + 2^5
- The largest number that can be represented by 5 bits is 31.
- One programming language can only use 16 bits to represent non-negative numbers, while a second language uses 56 bits to represent numbers. How many times as many unique numbers can be represented by the second language?
- 56-16=40 => 2^40
- 5 bits are used to represent both positive and negative numbers, what is the largest number that can be represented by these bits? (hint: different thatn question 1)
- The first bit represents whether it is positive or negative, so it would be the largest four bit number. So the largest number is 15.
Examples
import math
def exponent(base, power):
# Print the operation performed, turning the parameters into strings to properly concatenate with the symbols "^" and "=".
print(str(base) + "^" + str(power) + " = " + str(math.pow(base, power)))
# How can function become a problem? (Hint: what happens if you set both base and power equal to high numbers?)
exponent(156, 257)
DAT-1.C: Binary Math
Basic Information
- Binary is Base 2, meaning each digit can only represent values of 0 and 1.
- Decimal is Base 10, meaning eacht digit can represent values from 0 to 9.
- Conversion between sequences of binary to decimal depend on how many binary numbers there are, their values and their positions.
Practice Questions:
- What values can each digit of a Base 5 system represent?
- 5 digits, 0-4
- What base is Hexadecimal? What range of values can each digit of Hexadecimal represent?
- Base 16, 0-15
- When using a base above 10, letters can be used to represent numbers past 9. These letters start from A and continue onwards. For example, the decimal number 10 is represented by the letter A in Hexadecimal. What letter would be used to represent the Base 10 number 23 in a Base 30 system? What about in a Base 50 system?
- W, 23
Examples
- Using 6 bits, we can represent 64 numbers, from 0 to 63, as 2^6 = 64.
- The numbers in a sequence of binary go from right to left, increasing by powers of two from 0 to the total amount of bits. The whole number represented is the sum of these bits. For example:
- 111111
- 2^5 + 2^4 + 2^3 + 2^2 + 2^1 + 2^0
- 32 + 16 + 8 + 4 + 2 + 1
- 63
-
Fill in the blanks (convert to decimal)
- 001010 = 2^1 + 2^3 = 10
- 11100010 = 2^1 + 2^5 + 2^6 + 2^7 = 128 + 64 + 32 + 2 = 226
- 10 = 2^1 = 2
-
Fill in the blanks (convert to binary)
- 12 = 1100
- 35 = 100011
- 35/2=17+1
- 17/2=8+1
- 8/2=4+0
- 4/2=2+0
- 2/2=1+0
- 1/2=0+1
- 256 = 100000000
Hacks & Grading (Due SUNDAY NIGHT 4/23)
- Complete all of the popcorn hacks (Fill in the blanks + run code cells and interact + Answer ALL questions) [0.3 or nothing]
- Create a program to conduct basic mathematical operations with binary sequences (addition, subtraction, multiplication, division) [0.6 or nothing]
- For bonus, program must be able to conduct mathematical operations on binary sequences of varying bits (for example: 101 + 1001 would return decimal 14.) [0.1 or nothing]
def dectobin(num): # decimal to binary representation
if num > 1: # If the number is greater than 1,
dectobin(num // 2) # divide the number by 2 repeatedly
print(num % 2, end="") #print the binary subsequently
def math():
a = int(input("choose your first number: ")) # input value
b = int(input("choose your second number: ")) # input value
operation = input("Select one of the following commands for each number: addition, subtraction, multiplication, division: ") # choose the math operation
if operation == "addition":
result = a + b # shows addition
elif operation == "subtract":
result = a - b # shows subtraction
elif operation == "multiply":
result = a * b # shows multiplication
elif operation == "divide":
result = a / b # shows division
remainders = [] # stores the remainders in appending order as listed below
while result > 1: # convert to binary
quotient, remainder = divmod(result, 2) # dividing the number by two and having a remainder
remainders.append(remainder) # the remainders must be in a reverse order
print(f"{result} divided by 2 is {quotient} with a remainder of {remainder}") # print the division and remainder to see math
result = quotient # the result of the code
remainders.append(result) # the remainders being a result in reverse order or appended
binary = "".join(map(str, remainders[::-1])) # for binary the remainders must end at the end
print(f"{result} divided by 2 is {result // 2} with a remainder of {result % 2}") # print maths
print(f"binary of {operation}({a}, {b}): {binary}") # print final binary result
math() # operation