¿Algún beneficio al usar la macro WEXITSTATUS en C sobre la división por 256 en el estado de salida ()?

Estaba haciendo un ejercicio para la universidad donde tenía que devolver un valor con salida, ese valor era en realidad una cuenta de algo. Esto podría estar por encima de 255 (que exit () no puede manejar), pero el maestro sugirió usar datos de prueba donde el recuento nunca podría superar ese valor.

Después de todo esto, necesitaba manejar este valor de conteo, el estado de salida, obtuve este valor en el proceso principal usando waitpid (). Para mi sorpresa, si el proceso secundario devolvió 1, el valor "real" en el proceso principal fue 256, 2 fue 512 y así sucesivamente ...

Necesitaba imprimir este valor, así que simplemente lo dividí por 256 y ya estaba. Sin embargo, si uso la macro WEXITSTATUS (), también obtendré este valor de la forma en que lo quiero ...

Vi el código fuente C y esto es lo que descubrí:

#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)

Entiendo lo que está sucediendo aquí, por ejemplo, 512 en binario es 10 0000 0000, desplazando 8 o hacia la derecha dará 00 0000 0010, que es 2 en decimal. Lo que no entiendo en esta macro es ese operador & y el hecho de que 0xff00 parece un número aleatorio (probablemente no lo sea, ¿de dónde viene?). ¿Qué hace esto exactamente? ¿Por qué hay "& 0xff00" en la macro? ¿No funcionaría sin él?

Y la verdadera pregunta en este tema, ¿es lo mismo llamar a esta macro en mi código que dividir por 256?

Respuestas a la pregunta(4)

Su respuesta a la pregunta