Bit, Bytes and Logical Gates Abstraction.
Repository to 'Padrões de Projeto' subject at university. A height level Bit/Bytes and logical circuits abstractions.
Also Udacity Machine Learning Engineer Nanodegre program to add these package to PyPi.
pip install bitjoyImporting and instantiating Bit class.
from bitjoy.dtypes import Bit
zero = Bit(0)
# ZeroBit(0)
one = Bit(1)
# OneBit(1)Creating a bit passing 0 in the __init__ method, it will create another class: ZeroBit. The same away, passing 1, it will create a OneBit.
There is also support to logical operators (called logical gates or logical circuits).
from bitjoy.dtypes import LogicalOperator- NOT
LogicalOperator.not_(zero)
# OneBit(1)
LogicalOperator.not_(one)
# OneBit(0)- OR
LogicalOperator.or_(zero, zero)
# ZeroBit(0)
LogicalOperator.or_(zero, one)
# OneBit(1)
LogicalOperator.or_(one, zero)
# OneBit(1)
LogicalOperator.or_(one, one)
# OneBit(1)- AND
LogicalOperator.and_(zero, zero)
# ZeroBit(0)
LogicalOperator.and_(zero, one)
# ZeroBit(0)
LogicalOperator.and_(one, zero)
# ZeroBit(0)
LogicalOperator.and_(one, one)
# OneBit(1)There is also support to others Logical Gates:
nor_, nand_, xor_ and xnor_
There is also a Bytes class.
from bitjoy.dtypes import BytesPassing a list of Bit to the Bytes' constructor to creating a bytes instance. NOTE that bytes only have 8 bits. So passing more or less it'll throw an error.
bits = [Bit(0), Bit(0), Bit(0), Bit(0), Bit(1), Bit(1), Bit(0), Bit(0)]
b = Bytes(bits)
# Bytes(0, 0, 0, 0, 1, 1, 0, 0)To creating a easy bytes, use int_to_bytes function from utils to help.
from bitjoy.utils import int_to_bytes
b1 = int_to_bytes(10)
# Bytes(0, 0, 0, 0, 1, 0, 1, 0)
b2 = int_to_bytes(175)
# Bytes(1, 0, 1, 0, 1, 1, 1, 1)- Adding Bytes
Bytes class also has support to
+operand with__add__method.
b1_b2 = b1 + b2
# Bytes(1, 0, 1, 1, 1, 0, 0, 1)- Casting
Bytes supports casting with other number types:
int,bin,octandhex.
int(b1_b2)
# 185
bin(b1_b2)
# '0b10111001'
oct(b1_b2)
# '0o271'
hex(b1_b2)
# '0xb9'For arithmetic operators, the class Adder has two method to make additions:
half: to half-adder
full: to full-adder