比较二进制整数Ruby



我正在与Ruby中的主位掩蔽一起工作,其中包含设置列表。我已经将bitmask转换为二进制,需要将其与其他二进制值进行比较以查看某些设置是否存在。

例如,我从bitmask开始:

bitmask = 1540104

然后使用:

转换为二进制
binary = bitmask.to_s(2) => 101111000000000001000

由于该主二进制中的每个1代表一个单个设置,我该如何迭代该结果以在21个数字二进制的上下文中看到每个1的位置?喜欢:

100000000000000000000
001000000000000000000
000100000000000000000
000010000000000000000
000001000000000000000
000000000000000001000

任何帮助将不胜感激!

如何迭代该结果以在21位二进制的上下文中查看每个1的位置?

如果您只想请参阅 即为了调试目的,则可以通过Integer#bit_lengthInteger#[]和一些移动来解决:

bitmask = 1540104
bitmask.bit_length.downto(0) do |n|
  printf("%.*bn", bitmask.bit_length, 1 << n) unless bitmask[n].zero?
end

输出:

100000000000000000000
001000000000000000000
000100000000000000000
000010000000000000000
000001000000000000000
000000000000000001000

显示1的位置的最简单方法就是简单地显示其位置。

bitmask = 1540104
puts bitmask.bit_length.times.map { |i| [i, bitmask[i]] }.
             select { |_, b| b == 1 }.
             map { |i,_| "%2d" % i }
 3
15
16
17
18
20
bitmask = 1540104    
bitmask.to_s(2).each_char.with_index(0) {|b, index| puts (1 << index).to_s(2).rjust(bitmask.bit_length, "0").reverse if b == "1"}

输出:

100000000000000000000
001000000000000000000
000100000000000000000
000010000000000000000
000001000000000000000
000000000000000001000

相关内容

  • 没有找到相关文章

最新更新