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 bitjoy
Importing 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 Bytes
Passing 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
,oct
andhex
.
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