2013-03-29 64 views
7

我发现,在Ruby中使用上的数字100括号标记的时候,我得到这个:括号标记

irb(main):001:0> 100[0] 
=> 0 
irb(main):002:0> 100[1] 
=> 0 
irb(main):003:0> 100[2] 
=> 1 

所以我认为这是得到的数字,索引是这样的:

NUMBER: 1|0|0 
     ----- 
INDEX: 2|1|0 

我在编号789上试过了这个,发现了意想不到的结果。

irb(main):004:0> 789[0] 
=> 1 
irb(main):005:0> 789[1] 
=> 0 
irb(main):006:0> 789[2] 
=> 1 

我希望它返回9,然后8,然后7如果它得到的数字。从这个结果来看,这显然没有发生,那么在数字上使用括号符号究竟做了什么呢?

回答

13

这些是您正在使用的二进制位。看到这个的另一种方法是使用to_s,其参数指示所需的基数。

>> 789.to_s(2) 
=> "1100010101" 

字符串索引是由左到右,所以你不能在字符串比较[],但要注意如何(从右到左)的数字是1,0,1

这里的文档,如果你有兴趣:http://ruby-doc.org/core-1.9.3/Fixnum.html#method-i-5B-5D

+0

哇,我真的会*永远*甚至没有考虑过这个!很高兴知道,谢谢! (可以在10分钟内接受) – Doorknob

+1

我也不知道这一点。凉! –