C++ 十进制转二进制的转换

huangapple go评论79阅读模式
英文:

c++ conversion from decimal to binary

问题

我正在编写一个将十进制转换为二进制的程序,但我得到的答案不正确,我已经多次检查过,但无法解决。

#include <iostream>
#include <math.h>
using namespace std;
int decitobin(int n){
    int ans=0;
    int i=0;
    while(n!=0){
        int bit=n&1;
        ans=((bit * pow(10,i))+ans);
        n=n>>1;
        i++;
    }
    return ans;
}  
int main(){
    int n;
    cin>>n;
    if(n<0){
        n=n*(-1);
        int newans=decitobin(n);
        //1stcomp
        newans=(~newans);
        newans=newans+1;
        cout<<newans<<endl;
    }
    else{
        cout<<decitobin(n);
    }
}

我得到的输出是:
5 的二进制表示为 101
4 的二进制表示为 100
-6 的二进制表示为 -110

我已检查每一行并与解决方案进行了比对,但仍然找不到问题。

英文:

i am writing program for conversion of decimal to binary but answer i am getting is not correct i had checked it multiple times but couldn't make it.

`

#include&lt;iostream&gt;
#include&lt;math.h&gt;
using namespace std;
int decitobin(int n){
    int ans=0;
    int i=0;
    while(n!=0){
        int bit=n&amp;1;
        ans=((bit * pow(10,i))+ans);
        n=n&gt;&gt;1;
        i++;
    }
    return ans;
}  
int main(){
    int n;
    cin&gt;&gt;n;
    if(n&lt;0){
        n=n*(-1);
        int newans=decitobin(n);
        //1stcomp
        newans=(~newans);
        newans=newans+1;
        cout&lt;&lt;newans&lt;&lt;endl;
    }
    else{
        cout&lt;&lt;decitobin(n);
    }

} 

`

i am getting output
100 for 5,99 for 4
and -109 for -6

i had checked each line make it match with the solution but could not figure it out

答案1

得分: 2

在C++中有一种更简单的方法(尽管这可能不是你的老师要求的)

#include <bitset>
#include <iostream>

int main()
{
    std::size_t value{ 112ul };
    std::bitset<8> bits{ value };
    std::cout << bits;
    return 0;
}
英文:

Note in C++ there is an easier way (though that probably will not be what your teacher asked for)

#include &lt;bitset&gt;
#include &lt;iostream&gt;

int main()
{
    std::size_t value{ 112ul };
    std::bitset&lt;8&gt; bits{ value };
    std::cout &lt;&lt; bits;
    return 0;
}

答案2

得分: 0

另一种在代码中完成的方法,甚至不需要使用十进制逻辑。
只是为了向您展示内存中的数字已经是二进制格式。
在处理二进制数据时,通常需要使用掩码和移位操作。

#include <array>
#include <iostream>

auto get_number_of_bits(int value)
{
    std::size_t n{ 1ul };
    value >>= 1;

    while (value != 0) 
    {
        ++n;
        value >>= 1;
    }

    return n;
}

// 请注意,值在内存中已经是二进制数字
// 我们只需要“遍历”所有位并
// 向字符串插入'0'或'1'
std::string to_bin(const int value)
{
    // 计算数字中存在的位数
    const auto number_of_bits{ get_number_of_bits(value) };

    // 分配一个字符串来容纳输出中的正确/最小位数
    std::string string(number_of_bits, 0);
    int mask{ 0x01 << (number_of_bits - 1ul) }; // 选择我们从数字中想要的位

    // 循环遍历位
    for (std::size_t n{ 0ul }; n < number_of_bits; ++n)
    {
        string[n] = (value & mask) ? '1' : '0'; // 测试位是否已设置,如果是,则插入1,否则插入0
        mask >>= 1;
    }

    return string;
}

int main()
{
    std::cout << to_bin(5) << "\n";
    std::cout << to_bin(12345) << "\n";

    return 0;
}

希望这有所帮助。如果您需要进一步的解释或有其他问题,请告诉我。

英文:

Another way of doing it in code without even needing base 10 logic.
Just to show you numbers in memory are already in binary format.
Often in dealing with binary data you will need masks and shift operations.

#include &lt;array&gt;
#include &lt;iostream&gt;

auto get_number_of_bits(int value)
{
    std::size_t n{ 1ul };
    value &gt;&gt;= 1;

    while (value != 0) 
    {
        ++n;
        value &gt;&gt;= 1;
    }

    return n;
}

// note value will already be a binary number in memory
// we just need to &quot;walk&quot; over all the bits and
// insert a &#39;0&#39; or &#39;1&#39; to the string
std::string to_bin(const int value)
{
    // calculate the number of bits present in the number
    const auto number_of_bits{ get_number_of_bits(value) };

    // allocate a string to hold the correct/minimal number of bits in the output
    std::string string(number_of_bits,0);
    int mask{ 0x01 &lt;&lt; (number_of_bits - 1ul) }; // select which bit we want from number

    // loop over the bits
    for (std::size_t n{ 0ul }; n &lt; number_of_bits; ++n)
    {
        string[n] = (value &amp; mask) ? &#39;1&#39; : &#39;0&#39;; // test if bit is set if so insert a 1 otherwise a 0
        mask &gt;&gt;= 1;
    }

    return string;
}

int main()
{
    std::cout &lt;&lt; to_bin(5) &lt;&lt; &quot;\n&quot;;
    std::cout &lt;&lt; to_bin(12345) &lt;&lt; &quot;\n&quot;;

    return 0;
}

huangapple
  • 本文由 发表于 2023年1月9日 12:45:01
  • 转载请务必保留本文链接:https://go.coder-hub.com/75053268.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定