
Originariamente inviata da
Scara95
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