这是我对这个问题的解决方案,对于大于8位的数字 . 我的例子是16位值 . 注意:您必须检查第一位,看它是否为负数 .
脚步:
通过在变量前放置'〜'将#转换为赞美 . (即y = ~y)
将#s转换为二进制字符串
将二进制字符串分解为字符数组
从最右边的值开始,添加1,跟踪进位 . 将结果存储在字符数组中 .
将字符数组转换回字符串 .
private string TwosComplimentMath(string value1, string value2)
{
char[] binary1 = value1.ToCharArray();
char[] binary2 = value2.ToCharArray();
bool carry = false;
char[] calcResult = new char[16];
for (int i = 15; i >= 0; i--)
{
if (binary1[i] == binary2[i])
{
if (binary1[i] == '1')
{
if (carry)
{
calcResult[i] = '1';
carry = true;
}
else
{
calcResult[i] = '0';
carry = true;
}
}
else
{
if (carry)
{
calcResult[i] = '1';
carry = false;
}
else
{
calcResult[i] = '0';
carry = false;
}
}
}
else
{
if (carry)
{
calcResult[i] = '0';
carry = true;
}
else
{
calcResult[i] = '1';
carry = false;
}
}
}
string result = new string(calcResult);
return result;
}