Niepotrzebnie bawisz sie w dodawanie i odejmowanie. Spróbuj po prostu zamieniać 1 na 0 i 0 na 1:
for( int i = 0; i<bits; i++ )
{
if( *(nM + i) == 1 )
{
*(nM + i) = 0;
}
else
{
*(nM + i) = 1;
}
}
Jeżeli działamy na zerach lub jedynkach, można posłużyć się operatorem logicznym '!'. Zwraca prawdę (1) lub fałsz (0). Neguje 1 na 0 lub 0 na 1. Czyli kod wyglądałby tak:
for( int i = 0; i<bits; i++ )
{
*(nM + i) = !*(nM + i);
}
Czyż nie wygląda to piękniej? :-D
PS. Tak przy okazji. Twój zapis *(nM+1) jest, mówiąc delikatnie: katastroficzny. Po to wymyślono operatory [ ], aby z nich korzystać. Kod ma być czytelny.
for( int i = 0; i<bits; i++ )
{
nM[ i ] = !nM[ i ];
}
No teraz, to jest po prostu bajlando :-D