2013-03-29 11 views
7

Ich fand, dass, wenn sie auf die Anzahl 100 in Ruby Klammer-Notation, bekomme ich diese:Bracket-Schreibweise auf Ruby-Zahlen

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

So nahm ich es war die Ziffern bekommen, wie diese indiziert:

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

Ich versuchte dies auf die Nummer 789 mit unerwarteten Ergebnissen.

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

Ich würde erwarten, dass es 9 zurück, dann 8, dann 7, wenn sie die Ziffern bekommen. Aus diesem Ergebnis heraus geschieht das eindeutig nicht, also was genau tut Bracket-Notation auf einer Zahl tun?

Antwort

13

Dies sind die binären Bits, die Sie abziehen. Eine andere Möglichkeit, dies zu sehen, ist die Verwendung von to_s mit einem Argument, das die gewünschte Basis angibt.

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

String Indizierung ist von links nach rechts, so dass Sie nicht [] auf der Saite vergleichen kann, aber beachten Sie, wie (von rechts nach links) die Ziffern sind 1, 0, 1.

Hier ist die Dokumentation, wenn Sie interessiert sind: http://ruby-doc.org/core-1.9.3/Fixnum.html#method-i-5B-5D

+0

Wow, ich würde wirklich * nie * sogar darüber nachgedacht haben! Gut zu wissen, danke! (kann in 10 Minuten annehmen) – Doorknob

+1

Ich wusste das auch nicht. Cool! –

Verwandte Themen