está bien en lineas generales tu codigo, el error fue mio,
lo ecribí
porque no te estoy dando el codigo, solo una idea... XD
pero si tuve el error en la dirección... igual cuando te den codigos, así sea aquí procura revisar la lógica a antes de ejecutarlo... otra cosa, el contador empieza en 0 no en 1, es un while, no un do-while
el ejemplo interno del ciclo
00001
00010
00100
01000
10000
00000 ---> aqui sabes que desbordaste
el 1 se mueve hacia la izquierda... el desplazamiento lo puse al contrario debe ser <<
con una pequeña correción y quitando la impresión de arriba queda algo como
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char **argv ){
int a = 1;
int contador = 0;
while(a!=0){
a <<= 1;
contador ++;
}
a = 1;
a <<= contador-1;
printf( "\n maximo int positivo %d", a
-1 );//si cambias el tipo de a, cambia el tipo de %d al respectivo printf( "\n minimo int negativo %d", a
); printf( "\n el largo de la variable es de %d bits\n", contador
);
return EXIT_SUCCESS;
}