C++ - Desimal ke biner konversi

Aku menulis 'sederhana' (butuh 30 menit) program yang mengkonversi bilangan desimal ke biner. Saya YAKIN bahwa ada's banyak cara yang lebih sederhana sehingga anda dapat menunjukkan padaku? Berikut ini's kode:

#include <iostream>
#include <stdlib.h>

using namespace std;
int a1, a2, remainder;
int tab = 0;
int maxtab = 0;
int table[0];
int main()
{
    system("clear");
    cout << "Enter a decimal number: ";
    cin >> a1;
    a2 = a1; //we need our number for later on so we save it in another variable

    while (a1!=0) //dividing by two until we hit 0
    {
        remainder = a1%2; //getting a remainder - decimal number(1 or 0)
        a1 = a1/2; //dividing our number by two
        maxtab++; //+1 to max elements of the table
    }

    maxtab--; //-1 to max elements of the table (when dividing finishes it adds 1 additional elemnt that we don't want and it's equal to 0)
    a1 = a2; //we must do calculations one more time so we're gatting back our original number
    table[0] = table[maxtab]; //we set the number of elements in our table to maxtab (we don't get 10's of 0's)

    while (a1!=0) //same calculations 2nd time but adding every 1 or 0 (remainder) to separate element in table
    {
        remainder = a1%2; //getting a remainder
        a1 = a1/2; //dividing by 2
        table[tab] = remainder; //adding 0 or 1 to an element
        tab++; //tab (element count) increases by 1 so next remainder is saved in another element
    }

    tab--; //same as with maxtab--
    cout << "Your binary number: ";

    while (tab>=0) //until we get to the 0 (1st) element of the table
    {
        cout << table[tab] << " "; //write the value of an element (0 or 1)
        tab--; //decreasing by 1 so we show 0's and 1's FROM THE BACK (correct way)
    }

    cout << endl;
    return 0;
}

Dengan cara itu's rumit tapi saya mencoba yang terbaik.

edit - Berikut ini adalah solusi akhirnya saya menggunakan:

std::string toBinary(int n)
{
    std::string r;
    while(n!=0) {r=(n%2==0 ?"0":"1")+r; n/=2;}
    return r;
}
Mengomentari pertanyaan (7)

[std::bitset][1] memiliki .to_string() metode yang mengembalikan std::string memegang teks representasi biner, dengan leading-zero padding.

Memilih lebar bitset yang diperlukan untuk data anda, misal std::bitset<32> untuk mendapatkan 32-karakter string dari 32-bit integer.


#include 
#include 

int main()
{
    std::string binary = std::bitset(128).to_string(); //to binary
    std::cout
Komentar (3)

Berikut adalah fungsi rekursif yang mengambil bilangan bulat positif dan cetakan nya digit biner ke konsol.

Alex menyarankan, untuk efisiensi, anda mungkin ingin menghapus printf() dan menyimpan hasilnya dalam memori... tergantung pada cara penyimpanan hasil dapat dibatalkan.

/**
 * Takes a unsigned integer, converts it into binary and prints it to the console.
 * @param n the number to convert and print
 */
void convertToBinary(unsigned int n)
{
    if (n / 2 != 0) {
        convertToBinary(n / 2);
    }
    printf("%d", n % 2);
}

Kredit untuk UoA ENGGEN 131

*Catatan: keuntungan menggunakan unsigned int adalah bahwa hal itu dapat't menjadi negatif.

Komentar (5)

Anda dapat menggunakan std::bitset untuk mengkonversi nomor ke format biner.

Menggunakan potongan kode berikut:

std::string binary = std::bitset(n).to_string();

Saya menemukan ini di stackoverflow itu sendiri. Saya melampirkan link.

Komentar (1)

Cukup lurus ke depan solusi untuk mencetak biner:


#include 

int main()
{
 int num,arr[64];
 cin>>num;
 int i=0,r;
 while(num!=0)
{
  r = num%2;
  arr[i++] = r;
  num /= 2;
}

for(int j=i-1;j>=0;j--)
 cout
Komentar (0)

Non rekursif solusi:


#include 
#include

std::string toBinary(int n)
{
    std::string r;
    while(n!=0) {r=(n%2==0 ?"0":"1")+r; n/=2;}
    return r;
}
int main()
{
    std::string i= toBinary(10);
    std::cout
Komentar (1)

Sebuah int variabel tidak dalam desimal, it's dalam biner. Apa yang anda'kembali mencari sebuah string biner representasi dari jumlah tersebut, yang bisa anda dapatkan dengan menerapkan masker filter yang masing-masing bit, dan kemudian mencetak mereka:


for( int i = sizeof(value)*CHAR_BIT-1; i>=0; --i)
    cout 
Komentar (0)

Berikut ini adalah dua pendekatan. Yang satu ini mirip dengan pendekatan anda


#include 
#include 
#include 
#include 

int main()
{
    while ( true )
    {
        std::cout > x;

        if ( !x ) break;

        const unsigned long long base = 2;

        std::string s;
        s.reserve( std::numeric_limits::digits ); 

        do { s.push_back( x % base + '0' ); } while ( x /= base );

        std::cout 
Komentar (0)

Berikut ini adalah modern varian yang dapat digunakan untuk int ukuran yang berbeda.

#include 
#include 

template
std::enable_if_t
encode_binary(T i){
    return std::bitset(i).to_string();
}
Komentar (0)
std::string bin(uint_fast8_t i){return !i?"0":i==1?"1":bin(i/2)+(i%2?'1':'0');}
Komentar (1)

// function to convert decimal to binary
void decToBinary(int n)
{
    // array to store binary number
    int binaryNum[1000];

    // counter for binary array
    int i = 0;
    while (n > 0) {

        // storing remainder in binary array
        binaryNum[i] = n % 2;
        n = n / 2;
        i++;
    }

    // printing binary array in reverse order
    for (int j = i - 1; j >= 0; j--)
        cout 
Komentar (0)

Untuk ini , Di C++ anda dapat menggunakan itoa() fungsi .Fungsi ini mengubah bilangan bulat Desimal ke biner, desimal , heksadesimal dan oktal nomor.


#include
using namespace std;
int main(){
 int a;    
 char res[1000];
 cin>>a;
 itoa(a,res,10);
 cout
Komentar (0)

Di bawah ini adalah sederhana kode C yang mengkonversi biner ke desimal dan kembali lagi. Saya menulis itu lama untuk sebuah proyek di mana target itu tertanam prosesor dan alat-alat pengembangan punya stdlib itu cara terlalu besar untuk firmware ROM.

Ini adalah generic kode C yang tidak menggunakan perpustakaan, juga tidak menggunakan pembagian atau sisa (%) operator (yang lambat pada beberapa prosesor tertanam), juga tidak menggunakan floating point, juga tidak menggunakan tabel lookup atau meniru setiap aritmatika BCD. Apa itu tidak membuat penggunaan adalah jenis lama, lebih khusus unsigned long long (atau uint64), jadi jika anda tertanam prosesor (dan C compiler yang terjadi dengan itu) tidak bisa melakukan 64-bit integer aritmatika, kode ini tidak untuk aplikasi anda. Jika tidak, saya pikir ini adalah kualitas produksi C kode (mungkin setelah mengubah lama untuk int32 dan unsigned long long untuk uint64). Saya telah menjalankan semalam ini untuk menguji untuk setiap 2^32 menandatangani nilai integer dan tidak ada kesalahan dalam konversi di kedua arah.

Kami memiliki compiler C/linker yang bisa menghasilkan executable dan kami harus melakukan apa yang bisa kami lakukan tanpa setiap stdlib (yang adalah babi). Jadi tidak ada printf() atau scanf(). Bahkan tidak sprintf() atau sscanf(). Tapi kami masih memiliki antarmuka pengguna untuk mengkonversi basis-10 bilangan ke biner dan kembali. (Kami juga membuat kita sendiri malloc()-seperti utilitas juga dan kita sendiri transendental fungsi matematika juga.)

Jadi, ini adalah bagaimana saya melakukannya (main program dan panggilan untuk stdlib berada di sana untuk menguji hal ini pada mac saya, tidak untuk kode tertanam). Juga, karena beberapa yang lebih tua dev sistem don't mengenali "int64" dan "uint64" dan jenis yang sama, jenis yang lama dan unsigned lama yang digunakan dan diasumsikan sama. Dan panjang ini diasumsikan untuk menjadi 32 bit. Saya kira saya bisa `typedef indonesia itu.


// returns an error code, 0 if no error,
// -1 if too big, -2 for other formatting errors
int decimal_to_binary(char *dec, long *bin)
    {
    int i = 0;

    int past_leading_space = 0;
    while (i  2147483648)
            {
            return -1;                            // too big
            }
        *bin = -(long)abs_bin;
        }
     else
        {
        if (abs_bin > 2147483647)
            {
            return -1;                            // too big
            }
        *bin = (long)abs_bin;
        }

    return 0;
    }

void binary_to_decimal(char *dec, long bin)
    {
    unsigned long long acc;                // 64-bit unsigned integer

    if (bin < 0)
        {
        *(dec++) = '-';                    // leading minus sign
        bin = -bin;                        // make bin value positive
        }

    acc = 989312855LL*(unsigned long)bin;        // very nearly 0.2303423488 * 2^32
    acc += 0x00000000FFFFFFFFLL;                 // we need to round up
    acc >>= 32;
    acc += 57646075LL*(unsigned long)bin;
    // (2^59)/(10^10)  =  57646075.2303423488  =  57646075 + (989312854.979825)/(2^32)  

    int past_leading_zeros = 0;
    for (int i=9; i>=0; i--)            // maximum number of digits is 10
        {
        acc 
Komentar (0)

#include 
#include 

#define bits(x)  (std::string( \
            std::bitset(x).to_string() ).c_str() )

int main() {

   std::cout > 1 )  1) 
Komentar (0)

Cara mengkonversi desimal ke biner dalam C++. Tapi karena kita menggunakan mod, fungsi ini akan bekerja dalam kasus heksadesimal atau oktal juga. Anda juga dapat menentukan bit. Fungsi ini terus menghitung terendah yang signifikan sedikit dan letakkan di akhir string. Jika anda tidak begitu mirip dengan metode ini dari yang dapat anda kunjungi: https://www.wikihow.com/Convert-from-Decimal-to-Binary ``cpp

include <bit/berinteraksi dengan perangkat keras++.h>

menggunakan namespace std;

string itob(int bit, int n) { int c; char s[bit+1]; // +1 untuk menambahkan karakter NULL.

s[bit] = '\0'; // karakter NULL dalam sebuah array karakter bendera akhir string, tidak menambahkan hal itu dapat menyebabkan masalah.

c = bit - 1; // Jika panjang string adalah n, daripada indeks karakter terakhir dari string akan n - 1. Penyebab indeks adalah 0 tidak didasarkan 1 yang berdasarkan. Mencoba sendiri.

do { if(n%2) s[c] = '1'; lain s[c] = '0'; n /= 2; c--; } while (n>0);

sedangkan(c > -1) { s[c] = '0'; c--; }

return s; }

int main() { cout << itob(1, 0) << endl; // 0 dalam 1 bit biner. cout << itob(2, 1) << endl; // 1 2 bit biner. cout << itob(3, 2) << endl; // 2 dalam 3 bit biner. cout << itob(4, 4) << endl; // 4 dalam 4 bit biner. cout << itob(5, 15) << endl; // 15 dalam 5 bit biner. cout << itob(6, 30) << endl; // 30 dalam 6 bit biner. cout << itob(7, 61) << endl; // 61 di 7 bit biner. cout << itob(8, 127) << endl; // 127 dalam 8 bit biner. return 0; } ``

Output: Nol 01 010 0100 01111 011110 0111101 01111111

Komentar (0)

Oke.. saya mungkin sedikit baru untuk C++, tapi aku merasa seperti contoh di atas don't cukup mendapatkan pekerjaan yang dilakukan dengan benar.

Berikut's saya ambil pada situasi ini.


char* DecimalToBinary(unsigned __int64 value, int bit_precision)
{
    int length = (bit_precision + 7) >> 3 = begin; )
    {
        binary[n] = 48 | ((value & bit_value) == bit_value);
        bit_value 
Komentar (0)

#include 

// x is our number to test
// pow is a power of 2 (e.g. 128, 64, 32, etc...)
int printandDecrementBit(int x, int pow)
{
    // Test whether our x is greater than some power of 2 and print the bit
    if (x >= pow)
    {
        std::cout 
Komentar (0)

Konversi dari angka ke string biner:

string toBinary(int n) {
    if (n==0) return "0";
    else if (n==1) return "1";
    else if (n%2 == 0) return toBinary(n/2) + "0";
    else if (n%2 != 0) return toBinary(n/2) + "1";
}
Komentar (0)

DESIMAL KE BINER TIDAK ada ARRAY yang DIGUNAKAN *dibuat oleh Oya:

I'm masih pemula, jadi kode ini hanya akan menggunakan loop dan variabel xD...

Harap anda menyukainya. Hal ini mungkin dapat dibuat lebih sederhana dari adalah...


    #include 
    #include 
    #include 

    using namespace std;

    int main()
    {
        int i;
        int expoentes; //the sequence > pow(2,i) or 2^i
        int decimal; 
        int extra; //this will be used to add some 0s between the 1s
        int x = 1;

        cout 
Komentar (1)

di sini converter sederhana dengan menggunakan std::string sebagai wadah. hal ini memungkinkan nilai negatif.


#include 
#include 
#include 

int main()
{
    int x = -14;

    int n = std::numeric_limits::digits - 1;

    std::string s;
    s.reserve(n + 1);

    do
        s.push_back(((x >> n) & 1) + '0');
    while(--n > -1);

    std::cout 
Komentar (0)

Ini adalah lebih sederhana **** program dari sebelumnya


//Program to convert Decimal into Binary
#include
using namespace std;
int main()
{
    long int dec;
    int rem,i,j,bin[100],count=-1;
    again:
    coutdec;//input of Decimal
    if(dec
Komentar (0)