2017-01-30 2 views
0

Je me demande comment vous prenez un nombre (par exemple 9), le convertir en 32 int (00000000000000000000000000001001), puis inverser chaque bit (11111111111111111111111111110110). Je sais comment faire cela en remplaçant les nombres dans une chaîne, mais j'ai besoin de savoir comment faire cela avec des opérateurs binaires. Je pense que vous devez l'utiliser, "~", mais cela me donne un nombre négatif quand je l'utilise sur une valeur.Inverser tous les 32 bits d'un nombre en utilisant des opérateurs binaires dans C#

+1

utiliser un int non signé. –

+9

'11111111111111111111111111110110' en tant que' int' *** est *** un nombre négatif; '' val' est correct; si vous ne voulez pas le signer, utilisez 'uint' –

Répondre

0

Si vous regardez la version décimale de votre numéro, c'est un nombre négatif. Si vous le déclarez comme un entier non signé, alors il est positif. Mais cette question ne marche pas, binaire, il sera toujours 11111111111111111111111111110110. Essayez ceci:

int number = 9; 
Console.WriteLine(Convert.ToString(number, 2)); //Gives you 1001 
number = ~number;        //Invert all bits 
Console.WriteLine(Convert.ToString(number, 2)); 
//Gives you your wanted result: 11111111111111111111111111110110 
2

Cela fonctionne correctement. Le type de données int dans C# utilise des entiers signés, donc 11111111111111111111111111110110 est en fait un nombre négatif. Comme l'a fait remarquer Marc, si vous voulez utiliser des valeurs non signées, déclarez votre numéro uint.

+3

ce n'est pas vraiment vrai (ou du moins: complet) de dire" C# utilise des entiers signés "; plus correctement, C# le rend facilement disponible pour utiliser des nombres entiers signés ('sbyte',' short', 'int',' long') ou non signés ('byte',' ushort', 'uint',' uint', 'ulong') –

+0

@ MarcGravell Vrai, je voulais dire int. – Peter