Presque tous les ordinateurs utilisés aujourd'hui la représentation de complément à deux en interne, donc si vous faites une conversion simple comme celui-ci, vous obtiendrez les deux la chaîne de complément:
public string Convert(int x) {
char[] bits = new char[32];
int i = 0;
while (x != 0) {
bits[i++] = (x & 1) == 1 ? '1' : '0';
x >>= 1;
}
Array.Reverse(bits, 0, i);
return new string(bits);
}
C'est votre base pour les deux conversions restantes. Pour signe de magnitude, il suffit d'extraire le signe préalable et convertir la valeur absolue:
byte sign;
if (x < 0) {
sign = '1';
x = -x;
} else {
sign = '0';
}
string magnitude = Convert(x);
Pour son complément, soustrayez un si le nombre est négatif:
if (x < 0)
x--;
string onec = Convert(x);
si Bitconverter.GetBytes peut retourner les bits en octets, puis de passer des octets aux ints c'est juste BitConverter.GetInt32 (byte [] bytes) –
@Jimmy - Merci. Le chaînon manquant pour moi est de comprendre comment convertir au type 'decimal' à partir d'un tableau d'octets ou d'un tableau de Int32. – kbrimington