📅  最后修改于: 2023-12-03 15:13:50.519000             🧑  作者: Mango
在 C# 中,可以使用绝对值函数 Math.Abs()
来使负数变成正数,但这并不改变数值本身的正负性。如果要真正的将负数变成正数,可以通过以下两种方法实现。
所有的数(除了 0)都有一个对应的负数,它的绝对值和原数相等,但符号相反。因此,可以通过取反数的方式,将负数变成正数。
int a = -5;
int b = -a; // b = 5
在上面的代码中,将负数 -5
取反数,得到正数 5
。
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;
}