2013-03-29 4 views
7

ho scoperto che quando si utilizza la notazione staffa sul numero 100 in Ruby, ottengo questo:Staffa notazione sui numeri di Ruby

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

così ho pensato che stava diventando le cifre, indicizzati come questo:

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

Ho provato questo sul numero 789 con risultati inaspettati.

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

mi aspetterei che per tornare 9, quindi 8, quindi 7 se si stava facendo le cifre. Da questo risultato, chiaramente non sta succedendo, quindi cosa fa esattamente la notazione della parentesi quadra su un numero?

risposta

13

Questi sono i bit binari che stai tirando fuori. Un altro modo per vedere questo sta usando to_s con un argomento che indica la base desiderata.

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

String indicizzazione va da sinistra a destra, quindi non è possibile confrontare [] sulla corda, ma notare come (da destra a sinistra) le cifre sono 1, 0, 1.

Ecco i documenti se sei interessato: http://ruby-doc.org/core-1.9.3/Fixnum.html#method-i-5B-5D

+0

Wow, davvero * non lo avrei mai considerato! Buono a sapersi, grazie! (può accettare in 10 minuti) – Doorknob

+1

Non lo sapevo neanche. Freddo! –