假设我有一个整数98.此字符串的二进制表示形式为:
(98).to_s(2) # 1100010
Run Code Online (Sandbox Code Playgroud)
现在我想将这个二进制字符串转换为所有设置位的整数数组.这会给我:
[64,32,2]
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
更新: int转换为int数组不一定需要涉及String,这正是我所知道的.我假设非String操作也会更快.
看到所有这些不同的方法来处理这个问题,Ruby非常棒!
这可行:
i = 98
(0...i.bit_length).map { |n| i[n] << n }.reject(&:zero?)
#=> [2, 32, 64]
Run Code Online (Sandbox Code Playgroud)
Fixnum#bit_length 返回最高"1"位的位置Fixnum#[n]返回整数的第n位,即0或1Fixnum#<<将位移到左侧.1 << n相当于2 n一步步:
(0...i.bit_length).map { |n| i[n] }
#=> [0, 1, 0, 0, 0, 1, 1]
(0...i.bit_length).map { |n| i[n] << n }
#=> [0, 2, 0, 0, 0, 32, 64]
(0...i.bit_length).map { |n| i[n] << n }.reject(&:zero?)
#=> [2, 32, 64]
Run Code Online (Sandbox Code Playgroud)
你可能想要reverse结果.
| 归档时间: |
|
| 查看次数: |
1720 次 |
| 最近记录: |