2017-01-30 8 views
0

数値(たとえば9)を32 int(00000000000000000000000000001001)に変換してから、すべてのビット(11111111111111111111111111110110)を反転させる方法が不思議です。私は文字列内の数字を置き換えることによってそれを行う方法を知っていますが、私はバイナリ演算子でそれを行う方法を知る必要があります。私はあなたがこれを使用しなければならないと思う、 "〜"、しかし、それは私が値に使用するときに私に負の数を与えます。cのバイナリ演算子を使用して32ビットすべてを反転する#

+1

unsigned int型を使用します。 –

+9

'int' ***として' 11111111111111111111111111110110'は***です。 '〜val'は正しいです。あなたが署名したくないのであれば、 'uint'を使用してください。 –

答えて

0

数字の小数点を見ると、負の数です。 それを符号なしのintとして宣言すれば、それは正の整数になります。 しかし、このdoesntの物、それは常に11111111111111111111111111110110. これを試してみてくださいになりますバイナリ:

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

これは正しい機能を実行しています。 C#内のintデータ型は符号付き整数を使用するため、実際には11111111111111111111111111110110は負の数です。

マークが指摘したように、符号なしの値を使用する場合は、番号をuintと宣言します。

+3

「C#は符号付き整数を使用しています。より正確には、C#は、signed( 'sbyte'、' short'、 'int'、' long')またはunsigned( 'byte'、' ushort'、 'uint'、' ulong')整数のいずれかを簡単に使用できるようにします。 –

+0

@MarcGravell本当、私はintを意味しました。 – Peter

関連する問題