codice:
#include <stdio.h>
#include <math.h>
#define nbit 8
int main(){
int varX=-1;
int varY;
int varBinary[nbit];
int counter;
int isNegative=0;
if(varX<0){
isNegative=1;
varX=-varX;
} else isNegative=0;
varBinary[0]=0;
for (varY=(((int)pow(2,nbit-1))-1),counter=1; varY!=0; varY>>=1,counter++){
varBinary[counter] = (varX & varY ? 1 : 0);
}
int oneFound=0;
if(isNegative){
for(counter=nbit-1;counter>=0;counter--){
if(!oneFound){
if(varBinary[counter]==1) oneFound=1;
} else {
varBinary[counter]=!varBinary[counter];
}
}
}
printf("\n---\n");
for (counter=0; counter<nbit; counter++){
printf("%d",varBinary[counter]);
}
printf("\n---\n");
}
mi si presentano codifiche errate per valori come
-1
-127
ed entrambi vengono codificati allo stesso modo 
- se il numero è negativo metto ad 1 una variabile int, in pratica la uso come booleana
- il numero se negativo lo tratto come modulo e codifico come sempre
- se il numero è negativo procedo da destra a sinistra e trovato il primo 1 inverto tutte le cifre che trovo a seguire
non mi codifica bene neanche -128 