Es decir en orden haces:
- Invertir el valor del PORTB ( Por lo del Pull-up)
- Luego solo aislas esos 3 bits
- Finalmente asignas esos 3 bits a k
Podes hacerlo asi:
output_c( ~input_b() & 0b111 );
Es decir... Supongamos que queremos pasar los bits de RB0, RB1 y RB3 a RC0, RC1 y RC3, observa que es el mismo numero.
Supongamos que PORTB tiene el valor 0101 0010, El primer paso es invertirlo quedando:
1010 1101
El proximo paso es la AND con 0b00001011 lo cual te lo deja:
1010 1101
0000 1011
--------------
0000 1001
Observaras que todo bit con el que le hice AND si alguno estaba en 0, el resultado es 0, o por decirlo de otra forma, lo que haces es solamente dejar pasar los valores que poseen el 1 del numero 00001011.
Finalmente eso lo ponemos en el puerto C con el output_c... Entonces en este ejemplo tu funcion es:
output_c( ~input_b() & 0b1011 );