No debería, pero depende del código que genere el compilador. La estructura switch se supone que no hace comparación secuencial, y el compilador puede precalcular los saltos por que los case llevan constantes.
Como regla general, un switch-case se traduce como un conjunto de if-elseif-else en cascada, salvo por la -no- presencia de break, que en ese caso sabemos que la ejecución debe continuar en el código de la siguiente condición.
En el caso propuesto, el código generado será el mismo que cuatro if() en cascada. Si se sabe que 'datos' va a tener solo uno de cuatro valores, pues entonces podemos dejar el último caso con un default, y ahorramos una comparación (si dejamos el cuarto case, el compilador no sabría que solo hay cuatro casos, por lo que siempre haría la comparación).
A veces hay optimizaciones, como cuando las comparaciones se componen de valores consecutivos o repetidos, pero son casos muy raros. Por ejemplo, si tenemos un
switch (datos) {
case 1:
// código
break;
case 2:
// código
break;
case 3:
// código
break;
case 4:
// código
break;
...
el compilador podría generar un código en el que fuera decrementando una copia de datos, y saltar al código correspondiente cuando esa operación sea cero. O incluso generar una tabla de saltos, con una simple multiplicación del valor de datos (esta solución es la que algunos programadores implementan para acelerar el proceso).
lo que quiero es hacer que el valor leido del ADC tenga una buena resolucion para meterlo en 1 byte para poder asi mover mi PWM marrano a software
¿Y cuál es la resolución del ADC?
Si, suponemos, que el ADC tiene 10 bit de resolución, y que el voltaje ocupa todo ese rango (suponemos que alguna vez la entrada al ADC llega al voltaje máximo), entonces el pasarlo a un byte consiste en quedarnos con el byte alto de los dos donde queda guardado el resultado (y además, ajustado a la izquierda).
Me explico: en los ADC de 10, 12, 14 bit, el resultado se guarda en dos registros de 8 bit. Y en un bit de configuración podemos decidir si queremos que lo guarde ajustado hacia la derecha o hacia la izquierda (los bits que faltan hasta completar los 16 bit se rellenan con '0' en el lado contrario).
Ajustando ese valor de configuración para que guarde los 8 bit superiores en el byte alto del resultado, solo tenemos que leerlo, sin tener que hacer ninguna operación más.