正数的补码就是源码:
负数的补码是符号位不变,符号位不计入计算(1为负数,最高位是符号位),其余位取反,然后加1,然后把除了符号位的数据加个负号即可,因为计算出来的值是正值。
private Int32 GetComplementCode(int value)
{
byte symbol = (byte)(value >> 15);
if (symbol != 0)//负数
{
int temValue =(int) (value & 0x7fff);
int tempReverstTempValue =(int) (~temValue);
int ReverstTempValue = (int)(tempReverstTempValue & 0xff);
int endTempValue = (int) (ReverstTempValue + 1);
int endValue = -endTempValue;
return endValue;
}
else
{
return value;
}
}
调用:
int val = 0xffce;
int value = GetComplementCode(val);
Console.WriteLine(value);
val = 0x0898;
value = GetComplementCode(val);
Console.WriteLine(value);
输出:
-50
2200