representacion de numero binario con leds

Hola a todos.
Tengo que representar con 8 leds un numero binario,es decir si el numero tiene un 1 el leds se enciende,si el numero es 0 el leds se apaga.
El problema que tengo es que no se dar la condición.
Otra cosa que tengo que hacer es el cambio posiciones del numero binario,la posicion 0 con la 1, la 2 con la 3,4 con 5 y6 con 7,y volver a representarlo con los leds.No se realizar el intercambio de posiciones.
si alguien me puede ayudar se lo agradeceria.
un saludo

Para saber si un bit cualquiera es 1 o 0, podés usar algo así:

Valor & B00000001
Valor & B00000010
Valor & B00000100

Etc. para los demás bits

Una manera elegante de hacerlo sería algo así:

for (int BitNro = 0; BitNro < 8; BitNro++)
  if (Valor & (1 << BitNro))
    // prendo el led #BitNro
  else
    //apago

1 << BitNro lo que se hace es tomar el valor 1 y desplazarlo hacia la izquierda una X cantidad de bits, en este caso BitNro.

Valor y un & ("and" a nivel de bits, en oposición a &&), en definitiva devuelve true/false si Valor y el 1 desplazado tienen un 1 en el mismo bit.

El for al correr haría algo así:

Digamos que Valor es 5 (binario 00000101).

BitNro = 0: 

00000001 << 0 = 00000001 

Valor & 00000001  = 
  00000101   
& 00000001 
  --------
  00000001 => true

BitNro = 1: 

00000001 << 1 = 00000010

Valor & 00000010 = 

  00000101
& 00000010
  --------
  00000000 => false

BitNro = 2: 

00000001 << 2 = 00000100

Valor & 00000100 = 

  00000101
& 00000100
  --------
  00000100 => true
  
  
Etcétera.

esto es lo que puse,algo estare haciendo mal porque se enciende leds sin sentido.

void setup() {
for ( int i = 2 ; i < 10 ; i++)////pin donde estan los leds
pinMode( i , OUTPUT) ;
}

void loop() {

int BitNro;
int num=5;
Serial.println(num,BIN);

for ( BitNro = 0; BitNro < 8; BitNro++)
if(num & (1 << BitNro)){
digitalWrite( BitNro , HIGH);
}else{
digitalWrite( BitNro , LOW);
}

}

Los leds están conectados a los pines 2-9, pero en el digitalWrite estás usando BitNro, que va de 0 a 8.