将二进制数更改为2C表示法

Change binary number to 2C notation

本文关键字:2C 表示 二进制数      更新时间:2023-10-16

我必须创建一个函数,该函数将允许我将二进制数更改为2C表示法中的二进制数。

所以。。我有这样的东西:

string changeTo2C(int number){
int temp=number;
if(number<0)
    number*=-1;
string binary=changeToBin(number);  //number changed to binary
//complement to 8bits
binary=complementBits(binary); 
if(temp<0)
{
    //negate
    for(int i=0; i<howManyBits; i++)
    {
        if(binary[i]=='0')
            binary[i]='1';
        else
            binary[i]='0';
    }
    //add bit (1)
    binary=addBit(binary); //HERE
}
return binarna;

}

我不知道如何把最后一位加到这个数字上。(在对二进制数取反后,我们必须在整数上加一位,才能将其改为2C表示法)。

我试着这样做:

for(int i=howManyBits-1; i>=0; i--)
{
    if(binary[i]=='0')
    {
        binary[i]=='1';
        break;
    }
    else
    {
        binary[i]='0';
    }
}

这不起作用,我没有更多的想法来解决这个问题。

你能给我建议或粘贴一些代码吗?问候,卡米尔。

我在评论中写了一个例子:74(10)=01001010(2),−74(10"=10110110(U2)

以下是它应该如何工作:我们有:01001010(2)->否定10110101(2)->+1位(+000001)=10110110(U2)

//编辑

我真的做到了:)也许这不是最好的解决方案,但它是有效的。这是我的函数,在取负数后加1位。

string addBit(string binary)
{
    string bit="00000001";
    for(int i=howManyBites-1;i>=0;i--)
{
    if(binary[i]=='0' && bit[i]=='1'){
        binary[i]='1';
        break;
    }
    else
    {
        if(binary[i]=='1' && bit[i]=='1')
        {
            binary[i]='0';
            bit[i-1]='1';
        }
        else if(binary[i]=='1' && bit[i]=='0')
        {
            binary[i]='1';
            break;
        }
    }
}
return binary;
}