C ++将二进制字符串转换为16位二进制补码二进制字符串

时间:2018-01-31 03:38:17

标签: c++ string binary twos-complement

我试图实施我找到的解决方案,但它没有给出正确答案。

以下是解决方案:http://2scomplimentcpp.blogspot.com.au/

基本上输入是一个二进制字符串,我把该字符串转换为十进制,然后使用链接中的代码,但它只给我正确的答案...在两个测试用例中它给了我错误答案...当我使用二进制字符串" 01"它返回" 0000000000000001"而不是" 1111111111111111"。在另一种情况下,当我输入字符串" 10101"它返回" 0000000000010101"而不是" 0000000000001011" ...

我在这里做错了什么?理想情况下,我宁愿不必首先将它转换为十进制...有没有一种方法我可以简单地将二进制字符串我给出并将其直接转换为它的二进制补码二进制字符串(16位)? / p>

例如,如果给出二进制字符串" 01",

   int numBin = binary_to_decimal(s);
    numBin = (0 <= numBin) ? numBin : (-1)*numBin;
    int two = ((bitset<16>)numBin).flip().to_ulong();

    return bitset<16>(++two).to_string();

0 个答案:

没有答案