A ver, no estoy siguiendo el hilo por completo, pero la mejor forma de hacer todo lo que quieres es trabajar con cadenas. Es decir, cuando tu preguntes por un número binario, acepta una cadena que sólo tenga unos y ceros. Luego esa cadena la puedes convertir al tipo adecuado mediante las funcionoes de C y C++ como atoi (ASCII to Integer), etc.Lo mismo cuando sean otros números en otras bases. Cuando tengas la cadena, la recorres a ver si contiene dígitos válidos (por ejemplo, no aceptar nada mayor a 7 cuando pidas una cadena en octal, etc).Y si tienes ganas, defines un formato, por ejemplo: "101001b2" sería un número en base 2, "877AF3b16" en hexadecimal, etc. E incluso podrías adelantarte y hacer un parser matemático completo. Por ejemplo: "toDec(10100b2)". y cosas así.
Os complicáis la vida... ¿Por qué no empiezas por el bit más alto y lo haces al revés? Un saludo.