使用c#中的二进制运算符反转数字中的所有32位

时间:2017-01-30 20:26:50

标签: c# 32-bit invert binary-operators

我想知道如何取一个数字(例如9),将其转换为32 int(00000000000000000000000000001001),然后反转每一位(11111111111111111111111111110110)。我知道如何通过替换字符串中的数字来做到这一点,但我需要知道如何使用二元运算符。我认为你必须使用它,"〜",但是当我在一个值上使用它时,它只给我一个负数。

2 个答案:

答案 0 :(得分:2)

这是正确的功能。 C#中的int数据类型使用有符号整数,因此11111111111111111111111111110110实际上是负数。

正如Marc指出的那样,如果您想使用无符号值,请将您的号码声明为uint

答案 1 :(得分:0)

如果查看数字的十进制版本,则为负数。 如果你将它声明为unsigned int,那么它就是一个正数。 但这没关系,二进制它总是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