Ketika Anda mengatakan ingin mengonversi operator matematika ke string biner, apa sebenarnya yang Anda maksud? Gunakan representasi ASCII yang ditulis dalam biner?
bta
Saya kira Anda ingin melakukan hal Algoritma Genetika populer? :-)
nemesisfixx
Jawaban:
372
Anda memiliki Integer#to_s(base)dan String#to_i(base)tersedia untuk Anda.
Integer#to_s(base) mengonversi angka desimal menjadi string yang mewakili angka dalam basis yang ditentukan:
9.to_s(2)#=> "1001"
sedangkan kebalikannya diperoleh dengan String#to_i(base):
@ user1201917 Apa yang salah dengan itu? 9adalah 1001dalam biner.
preferred_anon
41
Saya mengajukan pertanyaan serupa . Berdasarkan jawaban @sawa , cara paling ringkas untuk merepresentasikan integer dalam string dalam format biner adalah dengan menggunakan string formatter:
"%b"%245=>"11110101"
Anda juga dapat memilih berapa lama representasi string, yang mungkin berguna jika Anda ingin membandingkan angka biner lebar-lebar:
1.upto(10).each {|n| puts "%04b"% n }0001001000110100010101100111100010011010
Saya melakukan beberapa tes lokal untuk mengkonversi bilangan bulat ke string biner, tetapi hasilnya menunjukkan bahwa kode seperti 245.to_s(2)akan lebih cepat daripada"%b" % 245
Green Su
Juga ini tidak berfungsi dengan baik dengan nilai negatif.
alex
21
Mengambil ide tabel pencarian bta, Anda dapat membuat tabel pencarian dengan sebuah blok. Nilai-nilai dihasilkan ketika mereka pertama kali diakses dan disimpan untuk nanti:
Anda tentu akan menggunakan Integer#to_s(2), String#to_i(2)atau "%b"dalam program nyata, tetapi, jika Anda tertarik pada cara kerja terjemahan, metode ini menghitung representasi biner dari bilangan bulat yang diberikan menggunakan operator dasar:
def int_to_binary(x)
p =0
two_p =0
output =""while two_p *2<= x do
two_p =2** p
output <<((two_p & x == two_p)?"1":"0")
p +=1end#Reverse output to match the endianness of %b
output.reverse
end
Untuk memeriksanya berfungsi:
1.upto(1000)do|n|
built_in, custom =("%b"% n), int_to_binary(n)if built_in != custom
puts "I expected #{built_in} but got #{custom}!"
exit 1end
puts custom
end
Jika Anda hanya bekerja dengan satu digit 0-9, kemungkinan lebih cepat untuk membuat tabel pencarian sehingga Anda tidak perlu memanggil fungsi konversi setiap saat.
Pengindeksan ke tabel hash ini menggunakan representasi integer atau string nomor akan menghasilkan representasi biner sebagai string.
Jika Anda membutuhkan string biner untuk menjadi jumlah digit tertentu (tetap memimpin nol), kemudian ubah x.to_s(2)ke sprintf "%04b", x(di mana 4jumlah minimum digit untuk digunakan).
@ bta- Saya menyandikan semua karakter ini ke dalam biner sehingga saya dapat menggunakannya dalam algoritma genetika. Saya sangat menyukai ide tabel pencarian untuk encode / decode karena set terbatas pada 0,9 dan + - * /
mcmaloney
2
Jika Anda mencari kelas Ruby / metode yang saya gunakan ini, dan saya juga menyertakan tes:
classBinarydefself.binary_to_decimal(binary)
binary_array = binary.to_s.chars.map(&:to_i)
total =0
binary_array.each_with_index do|n, i|
total +=2**(binary_array.length-i-1)* n
end
total
endendclassBinaryTest<Test::Unit::TestCasedef test_1
test1 =Binary.binary_to_decimal(0001)
assert_equal 1, test1
enddef test_8
test8 =Binary.binary_to_decimal(1000)
assert_equal 8, test8
enddef test_15
test15 =Binary.binary_to_decimal(1111)
assert_equal 15, test15
enddef test_12341
test12341 =Binary.binary_to_decimal(11000000110101)
assert_equal 12341, test12341
endend
Jawaban:
Anda memiliki
Integer#to_s(base)
danString#to_i(base)
tersedia untuk Anda.Integer#to_s(base)
mengonversi angka desimal menjadi string yang mewakili angka dalam basis yang ditentukan:sedangkan kebalikannya diperoleh dengan
String#to_i(base)
:sumber
("%08b" % int)
atau("%08b" % string)
untuk mengembalikan jumlah bit yang tetap.-9.to_s(2)
=> "-1001"
Adakah yang bisa menjelaskan hal ini?9
adalah1001
dalam biner.Saya mengajukan pertanyaan serupa . Berdasarkan jawaban @sawa , cara paling ringkas untuk merepresentasikan integer dalam string dalam format biner adalah dengan menggunakan string formatter:
Anda juga dapat memilih berapa lama representasi string, yang mungkin berguna jika Anda ingin membandingkan angka biner lebar-lebar:
sumber
245.to_s(2)
akan lebih cepat daripada"%b" % 245
Mengambil ide tabel pencarian bta, Anda dapat membuat tabel pencarian dengan sebuah blok. Nilai-nilai dihasilkan ketika mereka pertama kali diakses dan disimpan untuk nanti:
sumber
Anda tentu akan menggunakan
Integer#to_s(2)
,String#to_i(2)
atau"%b"
dalam program nyata, tetapi, jika Anda tertarik pada cara kerja terjemahan, metode ini menghitung representasi biner dari bilangan bulat yang diberikan menggunakan operator dasar:Untuk memeriksanya berfungsi:
sumber
Jika Anda hanya bekerja dengan satu digit 0-9, kemungkinan lebih cepat untuk membuat tabel pencarian sehingga Anda tidak perlu memanggil fungsi konversi setiap saat.
Pengindeksan ke tabel hash ini menggunakan representasi integer atau string nomor akan menghasilkan representasi biner sebagai string.
Jika Anda membutuhkan string biner untuk menjadi jumlah digit tertentu (tetap memimpin nol), kemudian ubah
x.to_s(2)
kesprintf "%04b", x
(di mana4
jumlah minimum digit untuk digunakan).sumber
Jika Anda mencari kelas Ruby / metode yang saya gunakan ini, dan saya juga menyertakan tes:
sumber