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

时间:2015-12-07 19:20:31

标签: c++ binary

我必须创建一个函数,它允许我用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';
    }
}

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

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

1 个答案:

答案 0 :(得分:-1)

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

这是怎么做的: 我们有:01001010(2) - &gt;否定10110101(2) - &gt; + 1bit(+00000001)= 10110110(U2)

// EDIT

我实际上做到了:) 也许它不是最好的解决方案,但它确实有效。 这是我的函数,在否定数字后添加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;
}