将负二进制数转换为十进制数

时间:2018-03-03 07:26:49

标签: c++ binary twos-complement

例如:

string binaryValue = "11111111111111111111111111111011" // -5

我需要将此字符串转换为此数字的十进制表示。

stoi(binaryValue, nullptr, 2)

将在这种情况下抛出异常。那么我怎样才能在c ++中做到这一点?字符串或int并不重要。

1 个答案:

答案 0 :(得分:0)

因为您可能知道号码存储为Twos补充
使用简单的伪代码转换它

  

翻转数字0-> 1,1-gt; 0从左边写到util,你在字符串中找到最后1个,不要切换这个

这将是你的答案 0000000000000000000000000101 = 5

这是来自https://www.geeksforgeeks.org/efficient-method-2s-complement-binary-string/

的代码
#include<bits/stdc++.h>
using namespace std;


string findTwoscomplement(string str)
{


  int n = str.length();


// Traverse the string to get first '1' from
// the last of string
int i;
for (i = n ; i >= 0 ; i--)
    if (str[i] == '1')
        break;

// If there exists no '1' concat 1 at the
// starting of string
if (i == 0)
    return '1' + str;

// Continue traversal after the position of
// first '1'
for (int k = i-1 ; k >= 0; k--)
{
    //Just flip the values
    if (str[k] == '1')
        str[k] = '0';
    else
        str[k] = '1';
}

// return the modified string
return str;;
}



int main()
{
    string str = "11111111111111111111111111111011";
    cout << findTwoscomplement(str);
//now you convert it to decimal if you want
    cout<<"Hello World";
    cout << stoul( findTwoscomplement(str),nullptr,2);
        return 0;


     }  

预览https://onlinegdb.com/SyFYLVtdf