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;
}
61
27
[
std::bitset
][1] memiliki.to_string()
metode yang mengembalikanstd::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.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.Kredit untuk UoA ENGGEN 131
*Catatan: keuntungan menggunakan unsigned int adalah bahwa hal itu dapat't menjadi negatif.
Anda dapat menggunakan std::bitset untuk mengkonversi nomor ke format biner.
Menggunakan potongan kode berikut:
Saya menemukan ini di stackoverflow itu sendiri. Saya melampirkan link.
Cukup lurus ke depan solusi untuk mencetak biner:
Non rekursif solusi:
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:Berikut ini adalah dua pendekatan. Yang satu ini mirip dengan pendekatan anda
Berikut ini adalah modern varian yang dapat digunakan untuk
int
ukuran yang berbeda.Untuk ini , Di C++ anda dapat menggunakan itoa() fungsi .Fungsi ini mengubah bilangan bulat Desimal ke biner, desimal , heksadesimal dan oktal nomor.
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 khususunsigned long long
(atauuint64
), 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 mengubahlama
untukint32
danunsigned long long
untukuint64
). 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()
atauscanf()
. Bahkan tidaksprintf()
atausscanf()
. Tapi kami masih memiliki antarmuka pengguna untuk mengkonversi basis-10 bilangan ke biner dan kembali. (Kami juga membuat kita sendirimalloc()
-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 yanglama
danunsigned lama
yang digunakan dan diasumsikan sama. Danpanjang
ini diasumsikan untuk menjadi 32 bit. Saya kira saya bisa `typedef indonesia itu.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
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.
Konversi dari angka ke string biner:
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...
di sini converter sederhana dengan menggunakan
std::string
sebagai wadah. hal ini memungkinkan nilai negatif.Ini adalah lebih sederhana **** program dari sebelumnya