2013-03-29 31 views
7

tôi thấy rằng khi sử dụng ký hiệu khung vào số 100 trong Ruby, tôi có được điều này:Bracket ký hiệu trên số của Ruby

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

Vì vậy, tôi cho rằng nó đã nhận được các chữ số, lập chỉ mục như thế này:

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

Tôi đã thử số này trên số 789 với kết quả không mong muốn.

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

Tôi mong chờ nó trở 9, sau đó 8, sau đó 7 nếu nó đã nhận được các chữ số. Từ kết quả này, điều đó rõ ràng là không xảy ra, do đó, chính xác những gì không sử dụng ký hiệu khung trên một số làm gì?

Trả lời

13

Đây là các bit nhị phân mà bạn đang kéo ra. Một cách khác để xem điều này là sử dụng to_s với một đối số cho biết cơ sở bạn muốn.

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

Chuỗi lập chỉ mục là từ trái sang phải, vì vậy bạn không thể so sánh [] trên chuỗi, nhưng lưu ý như thế nào (từ phải sang trái) các chữ số là 1, 0, 1.

Đây là tài liệu nếu bạn quan tâm: http://ruby-doc.org/core-1.9.3/Fixnum.html#method-i-5B-5D

+0

Wow, tôi thực sự sẽ * không bao giờ * thậm chí còn xem xét điều này! Tốt để biết, cảm ơn! (có thể chấp nhận trong 10 phút) – Doorknob

+1

Tôi cũng không biết điều này. Mát mẻ! –

Các vấn đề liên quan