P3-M 4/21 Binary Overview
A series of binary lessons focusssed on math and conversions.
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 a binary sequence.
Practice Questions:
- How many bits are in 3 bytes? 24 bits
- What digital information can be represented by bits? 0 or 1
- Are bits an analog or digital form of storing data? What is the difference between the two? Digital form of storing data.
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 __ 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? 31
- One programing 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? 2^56 - 2^16 = 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 than question 1) 8
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(5, 2)
# A function like this can become a problem if both the base and power parameters are set to very high numbers.
# The math.pow() function is used to calculate the exponent given the inputed base and power.
# By setting botht he base and power equal to high powers, the result may be inaccurate or wrong.
# It is important to understand the limitations of the data types being used.
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? Base 5 can only represent values from 0 to 4
- What base is Hexadecimal? What range of values can each digit of Hexadecimal represent? Base 16
- 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?
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^3+2^1 = 10
- 11100010 = 2^7+2^6+2^5+2^1 = 226
- 10 = 2^1 = 2
-
Fill in the blanks (convert to binary)
- 12 = 0011
- 35 = 110001
- 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 binary_to_decimal(binary):
"""
Convert a binary sequence to decimal.
"""
decimal = 0
for digit in binary:
decimal = decimal*2 + int(digit)
return decimal
def decimal_to_binary(decimal):
"""
Convert a decimal number to binary sequence.
"""
binary = ""
if decimal == 0:
binary = "0"
while decimal > 0:
binary = str(decimal % 2) + binary
decimal //= 2
return binary
def binary_addition(binary1, binary2):
"""
Add two binary sequences and return the result as a binary sequence.
"""
decimal1 = binary_to_decimal(binary1)
decimal2 = binary_to_decimal(binary2)
decimal_sum = decimal1 + decimal2
return decimal_to_binary(decimal_sum)
def binary_subtraction(binary1, binary2):
"""
Subtract two binary sequences and return the result as a binary sequence.
"""
decimal1 = binary_to_decimal(binary1)
decimal2 = binary_to_decimal(binary2)
decimal_diff = decimal1 - decimal2
if decimal_diff < 0:
return "-" + decimal_to_binary(abs(decimal_diff))
else:
return decimal_to_binary(decimal_diff)
def binary_multiplication(binary1, binary2):
"""
Multiply two binary sequences and return the result as a binary sequence.
"""
decimal1 = binary_to_decimal(binary1)
decimal2 = binary_to_decimal(binary2)
decimal_prod = decimal1 * decimal2
return decimal_to_binary(decimal_prod)
def binary_division(binary1, binary2):
"""
Divide two binary sequences and return the quotient as a binary sequence.
"""
decimal1 = binary_to_decimal(binary1)
decimal2 = binary_to_decimal(binary2)
if decimal2 == 0:
return "Error: Division by zero"
decimal_quot = decimal1 // decimal2
return decimal_to_binary(decimal_quot)
result = binary_addition("101", "1001")
print(result)