📜  c# 使负数为正 - C# (1)

📅  最后修改于: 2023-12-03 15:13:50.519000             🧑  作者: Mango

C# 使负数为正

在 C# 中,可以使用绝对值函数 Math.Abs() 来使负数变成正数,但这并不改变数值本身的正负性。如果要真正的将负数变成正数,可以通过以下两种方法实现。

1. 取反数

所有的数(除了 0)都有一个对应的负数,它的绝对值和原数相等,但符号相反。因此,可以通过取反数的方式,将负数变成正数。

int a = -5;
int b = -a; // b = 5

在上面的代码中,将负数 -5 取反数,得到正数 5

2. 位运算

C# 中,整数类型使用二进制表示。对于有符号的整数类型 int,最高位表示符号位,0 表示正数,1 表示负数。因此,可以通过对最高位进行位运算,将负数变成正数。

int a = -5;
int b = a & 0x7FFFFFFF; // b = 2147483643

在上面的代码中,将负数 -5 转化为二进制数 1111 1111 1111 1111 1111 1111 1111 1011,再进行位运算,将最高位变成 0,得到二进制数 0111 1111 1111 1111 1111 1111 1111 1011,转化为十进制数 2147483643,就是正数 5 的补码。

需要注意的是,以上两种方法都需要先判断该数是否为负数,否则会出现意外的错误。

int a = -5;
int b;
if (a < 0)
{
    b = -a; // 或者 b = a & 0x7FFFFFFF;
}
else
{
    b = a;
}