0

Rubyを使用して整数値のバイナリ左シフトを行う方法は?


左シフトバイナリ操作を実行しようとしていますが、移動の代わりに奇妙な文字が表示されます..

次のように実行する必要があると思います:(java)

b = (b >> 2); //0011 1111
b = (b << 2); //1111 1100

私はルビーでこれをやっています:

currentRed = ChunkyPNG::Color.r(image[x,y])
currentGreen = ChunkyPNG::Color.g(image[x,y])
currentBlue = ChunkyPNG::Color.b(image[x,y])

binRed = currentRed.to_s.unpack("b*")[0]
binGreen = currentGreen.to_s.unpack("b*")[0]
binBlue = currentBlue.to_s.unpack("b*")[0]

puts "original"

puts "r #{binRed}"
puts "g #{binGreen}"
puts "b #{binBlue}"

puts "------"

binRed = binRed << 2

binGreen = binGreen << 2
binBlue = binBlue << 2


puts "new"

puts "r #{binRed}"
puts "g #{binGreen}"
puts "b #{binBlue}"

そしてそれを得る:

ここに画像の説明を入力

前もって感謝します..

4

2 に答える 2

1

Ruby では<<、メソッドです。実際、Ruby のほとんどの演算子はメソッドです。

a = b << c
a = b + c
a = b ** c

# This is exactly the same as

a = b.<<(c)
a = b.+(c)
a = b.**(c)

独自のクラスでそれらをオーバーライドして、やりたいことを実行させることもできます。これはおそらく、Ruby ではすべて (実際にはすべて) が内部のオブジェクトです (クラスやモジュールでさえオブジェクトでありnil、オブジェクトでさえあります)。

たとえばString<<メソッドの場合、追加を意味します。

a = "Hello, " << "Word"
# a == "Hello, Word"

ただし、メソッドの場合Fixnum<<メソッドは単に左シフトを意味します。

a = 5 << 2
# a == 20

したがって、正しい「演算子」を使用していますが、オブジェクトが正しいクラスであることを確認する必要があります。FixnumRubyの型である整数が必要です。

そしてcurrentRedcurrentBlue、およびcurrentGreenFixnumすでにタイプです。

于 2019-04-20T01:49:25.323 に答える