Me gustó el problema y supongo que ya lo tienes solucionado, así que me he dispuesto a dar solución recursiva a ello. Poco eficiente pero recursiva. Usa una función de interface:
#include <stdio.h>
int f1(unsigned long n, unsigned long long s) {
return s==1? n : f1(n>>1, --s);
}
int es_negativo(unsigned long n) {
return f1(n, sizeof(unsigned long long)*8);
}
int main() {
printf("%d\n", es_negativo
(65536)); printf("%d\n", es_negativo
(-32)); }