Quote Originariamente inviata da Scara95 Visualizza il messaggio
Ti basta tenere tutti gli 0 fino al primo 1 e poi cambiare gli altri partendo dal numero positivo:
00010100 -> 11101100

Comunque il tuo codice presenta diversi errori:
i>r è sempre falsa: 0 è verosimilmente sempre minore di r, al più è uguale.
Inoltre r-i inizia con r-0=r che è una cella oltre la fine.
Anche se tu avessi scritto correttamente i<r e r-i-1 l'algoritmo non sarebbe stato comunque corretto. Infatti partire dal bit più significativo è come supporre che ci sia un riporto ad ogni bit, mentre tu avrai riporto finché hai 1 e poi basta:

00010100 -> 11101011 + 1 -> 11101100
Oddio che sbadato! hai ragione!

codice:
for(int i=1;i<r;i++){                
    if(bin[r-i]==1)
        bin[r-i]=0;
    else
        bin[r-i]=1;
}
if(bin[r-1]==0)
    bin[r-1]=1;
Ecco così è corretto però in effetti come hai detto tu ho constatato che anche correggendo ciò , comunque non ottengo ancora quello che mi serviva.

Quindi sto tentando di ragionare sul tuo consiglio ...
Quote Originariamente inviata da Scara95 Visualizza il messaggio
Ti basta tenere tutti gli 0 fino al primo 1 e poi cambiare gli altri partendo dal numero positivo:
00010100 -> 11101100
Appena riesco ad ottenere qualcosa lo posto