2017-12-20 18 views
0

:Ruby言語を使用してバイナリの10進数への変換に数字「8」が含まれるのはなぜですか?私はCoderbyte上で次のコードの挑戦のためのソリューションで探しています

、機能BinaryReversal(str)はそのバイナリ表現をとり、正の整数になりますこれは、渡されるstrパラメータを取る必要があり、そのビット列を逆にして、最後に10進形式の新しい逆文字列を返します。たとえば、str"47"の場合、この整数のバイナリバージョンは00101111です。あなたのプログラムはこのバイナリ文字列を逆にして、11110100とし、最後にこの文字列の小数点のバージョンを返します。これは244です。

ソリューションです:バイナリは、それは長さがに等しいですまで0 sがその上に追加持っている必要がありますなぜ私は理解していない

def BinaryReversal(str, dig = 8) 
    binary = str.to_i.to_s(2).reverse 
    dig += 8 until dig >= binary.length 
    binary += '0' until binary.length == dig 
    binary.to_i(2) 
end 

。実際、私はの役割を全く理解していません。

+1

Rubyについてはわかりませんが、8桁の長さに値を左パディングするために必要なゼロを計算していると思います(たとえば、 '10001'から' 00010001'に反転された値が正しい( '10001000')。 –

答えて

1

strが "47"の場合、バイナリに "111101"が割り当てられます。

binary = str.to_i.to_s(2).reverse 

通常、バイナリ値は8文字または8ビットで表します。この時点で、バイナリ文字列を単純に整数に変換することはできません。 "111101"はバイナリで61です。

代わりに、 "111101"を8ビットになるまでゼロで埋めなければなりません。これは、次のコードが行うことです。

dig += 8 until dig >= binary.length 
    binary += '0' until binary.length == dig 

8ビットが得られたら、それを整数に戻すことができます。

関連する問題