在 C# 中使用二元运算符反转数字中的所有 32 位

Inverting all 32 bits in a number using binary operators in c#

我想知道如何将一个数字(例如 9)转换为 32 位整数 (00000000000000000000000000001001),然后反转或翻转每一位 (11111111111111111111111111110110),以便零变为一,而一变为零。

我知道如何通过替换字符串中的数字来做到这一点,但我需要知道如何在二进制数上使用二元运算符来做到这一点。

我认为你必须使用这个运算符“~”,但当我对一个值使用它时它只会给我一个负数。

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

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

如果您查看数字的十进制版本,那么它是一个负数。 如果您将其声明为无符号整数,那么它就是一个正数。 不过没关系,二进制永远是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