En los lenguajes de programación de alto nivel como c# o java estos sistemas de representación no se usan directamente (más que en contadas ocasiones el hexadecimal para representación de colores).
A más bajo nivel, el sistema binario, se utiliza para representar la unidad mínima de información (bit) que es capaz de indicar con un 0 o un 1 un valor alterno. De este modo, con un bit, se representa a bajo nivel un valor bool para indicar "true" o "false".
El resto de valores (enteros, cadenas de texto, representación de clases complejas, etc..) se representan, a bajo nivel, en binario solo que, debido al formato de este sistema, es una gran cantidad de información (por ejemplo, en ASCII, una sola letra es un binario de 8 dígitos).
Por ese motivo se inventaron sistemas de representación a mayor escala como el octal o el hexadecimal, para proveer a los desarrolladores de formas abreviadas de representar el mismo dato.
El octal funciona en base 8 y el hexadecimal en 16 por lo que se necesitan menos dígitos para representar el mismo valor.
Como ejemplo, la letra 'a' minúscula en ASCII en binario es 0110 0001, en hexadecimal el 62, en decimal (nuestro sistema de representación más habitual, en base 10) es el 97 y en octal 141.
Como ves, es mucho más fácil trabajar con hexadecimales (por citar uno) que con binarios aunque, por debajo, el compilador se encargue de convertir estos valores a binario.