En teoría se como podría funcionar pero en la práctica nunca he probado, habría que hacer una clase que maneje el tipo BitArray y otra que interprete los valores usando la transformación de sistemas binario a sistema decimal pero usando String, todas las operaciones se deben hacer en binario ya que el sistema decimal tiene un limite para cada tipo de variable y debe expresarse igualmente en String. Podría hacer un ejemplo de suma y resta, que no me llevaría mucho tiempo, pero es cuestión de investigar como se hacen las operaciones en binario, como se lleva el binario a decimal, y como se pueden expresar los decimales, me están pasando varias ideas por la mente...
Lo bueno del sistema binario es que las operaciones básicas, como la suma, resta, multiplicación y división están limitadas a operaciones extremadamente sencillas, ya que no hay muchas posibilidades, las operaciones son siempre 0 con 0, 1 con 0, 0 con 1 y 1 con 1.
Este es un ejemplo de suma, el problema se presenta al tratar de representarlo como String, no se me ocurre algo práctico por ahora...
Module Module1
Public Class Number
Public Bits As BitArray
Public MaxBits As Integer
''' <summary>
''' Constructor de la clase Number
''' </summary>
''' <param name="N"></param>
''' <remarks>Representa el límite en Bits</remarks>
Public Sub New(ByVal N As Integer)
'Recordemos que la cantidad de valores que puede tomar una variable que'
'soporta N bits es 2^N, de modo que 2^Integer.MaxValue es incalculable,'
'al menos normalmente, así que el límite lo dará la memoria disponible.'
MaxBits = N
Bits = New BitArray(N, False)
End Sub
''' <summary>
''' Representa un arreglo de Bits como String
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Overrides Function ToString() As String
ToString = String.Empty
For Each x As Boolean In Bits
ToString += ValorAbsoluto(x).ToString
Next
End Function
''' <summary>
''' Para un True (-1) Devuelve (1). Para un False (0) Devuelve (0).
''' </summary>
''' <param name="value"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function ValorAbsoluto(ByVal value As Boolean) As Byte
Return CByte(CInt(value) * (-1))
End Function
Public Shared Operator +(ByVal a As Number, ByVal b As Number) As Number
Dim c As New Number(Math.Max(a.MaxBits, b.MaxBits))
Dim aVA As Byte, bVa As Byte
For N As Integer = 0 To (Math.Min(a.MaxBits, b.MaxBits) - 1)
aVA = ValorAbsoluto(a.Bits(N))
bVa = ValorAbsoluto(b.Bits(N))
If (aVA + bVa) > 1 Then
If (N - 1) < 0 Then
Throw New OverflowException()
Else
c.Bits(N) = False
c.Bits(N - 1) = True
End If
Else
c.Bits(N) = aVA + bVa
End If
Next
Return c
End Operator
End Class
Sub Main()
'Números de 8 Bits (Byte)'
Dim a As New Number(8)
Dim b As New Number(8)
'Está será la suma de Bits que realizaremos'
' 0 0 0 1 0 0 0 0'
'+ 0 0 0 1 0 0 0 0'
'-----------------'
' 0 0 1 0 0 0 0 0'
'Le damos a 'a' y 'b' el valor 1 (True) en el Index 3'
a.Bits.Set(3, True)
b.Bits.Set(3, True)
Dim c As Number = a + b
Console.WriteLine(c)
Console.ReadKey()
End Sub
End Module
Bajo esta explicación hice el ejemplo
http://es.wikipedia.org/wiki/Sistema_binario#Suma_de_n.C3.BAmeros_binarios