我必须创建一个函数,它允许我用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';
}
}
这不起作用,我没有更多的想法来解决这个问题。
你可以给我建议或粘贴一些代码吗? 问候, 卡米尔。
答案 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;
}