将整数更改为二进制数字字符串 我目前正在研究C++中MIPS处理器的COMP架构类,并且从十进制到二进制(有符号数字两种方式)都有一些问题。在最后一点之前,一切都正常,因为我当前的算法在1

将整数更改为二进制数字字符串 我目前正在研究C++中MIPS处理器的COMP架构类,并且从十进制到二进制(有符号数字两种方式)都有一些问题。在最后一点之前,一切都正常,因为我当前的算法在1,c++,algorithm,binary,C++,Algorithm,Binary,Replace上属于int的越界区域: if((mask&a) >= 1) 与以下任何一项: if ((mask & a) != 0) 或: 您的问题是,最后一位给出的是负数,而不是正数。为stream//Correction定义的1>(int&)的问题-更不用说>:-)setbase()stream修饰符不支持2值作为参数 使用标准C函数strtol(),该函数具有基值参数(二进制为2) 或者,如果您确实希望自己实现转换,请尝试以下代码: int BinaryStri

Replace上属于int的越界区域:

if((mask&a) >= 1)
与以下任何一项:

if ((mask & a) != 0)
或:

您的问题是,最后一位给出的是负数,而不是正数。

为stream//Correction定义的1>(int&)的问题-更不用说>:-)setbase()stream修饰符不支持2值作为参数
  • 使用标准C函数strtol(),该函数具有基值参数(二进制为2)
  • 或者,如果您确实希望自己实现转换,请尝试以下代码:

    int BinaryStringToDecimal(string a) 
    {
        int Rslt = 0;
        int Mask = 1;
        for (int i = a.length()-1; i >= 0; --i, Mask <<= 1) {
            if (a.at(i) != '0') {
                Rslt |= Mask;
            }
        }
        return (Rslt);
    }
    
    int BinaryStringToDecimal(字符串a)
    {
    int Rslt=0;
    int-Mask=1;
    
    对于(int i=a.length()-1、 i>=0;--i,Mask为什么不能将
    int
    转换为
    uint
    ?那么生成二进制字符串就很容易了,因为您不必担心符号位。将二进制字符串转换为
    int
    :将其构建为
    uint
    ,然后将其转换为
    int

    string DecimalToBinaryString(int a)
    {
        uint b = (uint)a;
        string binary = "";
        uint mask = 0x80000000u;
        while (mask > 0)
        {
            binary += ((b & mask) == 0) ? '0' : '1';
            mask >>= 1;
        }
        cout<<binary<<endl;
        return binary;
    }
    
    string十进制字符串(int a)
    {
    uint b=(uint)a;
    字符串binary=“”;
    uint掩码=0x80000000u;
    while(掩码>0)
    {
    二进制+=((b&mask)==0)?“0”:“1”;
    掩码>>=1;
    }
    
    实际上,这些都有标准的一行程序

    #include <bitset>
    
    std::string s = std::bitset< 64 >( 12345 ).to_string(); // string conversion
    
    std::cout << std::bitset< 64 >( 54321 ) << ' '; // direct output
    
    std::bitset< 64 > input;
    std::cin >> input;
    unsigned long ul = input.to_ulong();
    
    #包括
    std::string s=std::bitset<64>(12345).to_string();//字符串转换
    标准::cout(54321)输入;
    std::cin>>输入;
    无符号长ul=input.to_ulong();
    

    .

    我检查了你的代码,没有发现任何错误。这是我使用的代码

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main ()
    {
      int a=1111165117;
      string binary  ("");
        int mask = 1;
        for(int i = 0; i < 31; i++)
        {
        if((mask&a) >= 1)
            binary = "1"+binary;
        else
            binary = "0"+binary;
         mask<<=1;
     }
     cout<<binary<<endl;
     system("PAUSE");         //optional if not using ideone
     return EXIT_SUCCESS;     //optional if not using ideone
     }
    
    #包括
    #包括
    使用名称空间std;
    int main()
    {
    INTA=1111165117;
    字符串二进制(“”);
    int-mask=1;
    对于(int i=0;i<31;i++)
    {
    如果((屏蔽a)>=1)
    binary=“1”+二进制;
    其他的
    binary=“0”+二进制;
    
    maskOne改变效率的选项是一次工作4位,将每个Nyble映射到对应的4个字符的字符串。这将减少字符串赋值。我还将考虑按MSB到LSB顺序生成答案,而不是按LSB顺序生成答案,因此您可以使用
    binary+=pattern[Nyble];
    。扩展右边的字符串可能(几乎无法测量)比在左侧有效插入时的效率更高。除非我真的需要自己进行转换,否则我会使用
    std::bitset
    来处理转换和打印:
    std::cout除了像@JonathanLeffler所说的从左到右工作之外,我建议您预先分配整个字符串,因为您知道输出将是32
    char
    s。根据字符串实现的不同,它可能会或可能不会有不同,但肯定不会有什么影响。@Chaos\u 99就是这样。你从哪里得到的呢?@Chaos\u 99很久以前,没有人能够制作出可靠的编译器,而且没有足够的用户和测试用例来进行足够的预发布QA.Tho这些日子已经过去了,但有些人选择留在这些日子里。别告诉我,我宁愿早换也不愿晚换。但是如果你必须保证你的代码在20多年的时间里编译完全相同,你不能时不时地做一个
    升级
    。但让我们到此结束。这对其他人没有帮助。令人惊讶的是,似乎没有人会这么做该位集的to_字符串将返回填充的二进制表示形式。显然,由于位集返回的是该集的二进制表示形式,因此它应该返回该值。但是如果有人“误用”将整数转换为二进制字符串表示的位集,它们将调用填充的输出。
    cout@parastrish
    0x
    表示十六进制,而不是二进制。C++14引入以
    0b
    开头的二进制文本。
    string DecimalToBinaryString(int a)
    {
        uint b = (uint)a;
        string binary = "";
        uint mask = 0x80000000u;
        while (mask > 0)
        {
            binary += ((b & mask) == 0) ? '0' : '1';
            mask >>= 1;
        }
        cout<<binary<<endl;
        return binary;
    }
    
    uint b = 0;
    for (int i = 31; i >=0; --i)
    {
        b <<= 1;
        if (a.at(i) == '1')
            b |= 1;
    }
    int num = (int)b;
    
    #include <bitset>
    
    std::string s = std::bitset< 64 >( 12345 ).to_string(); // string conversion
    
    std::cout << std::bitset< 64 >( 54321 ) << ' '; // direct output
    
    std::bitset< 64 > input;
    std::cin >> input;
    unsigned long ul = input.to_ulong();
    
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main ()
    {
      int a=1111165117;
      string binary  ("");
        int mask = 1;
        for(int i = 0; i < 31; i++)
        {
        if((mask&a) >= 1)
            binary = "1"+binary;
        else
            binary = "0"+binary;
         mask<<=1;
     }
     cout<<binary<<endl;
     system("PAUSE");         //optional if not using ideone
     return EXIT_SUCCESS;     //optional if not using ideone
     }