2012-07-13 39 views
6

thể trùng lặp:
Use of caret symbol(^) in Ruby^dùng cho ruby ​​là gì?

Vì vậy, tôi đang chơi xung quanh với một số mã và tôi đã cố gắng để chơi xung quanh với các nhà điều hành điện. Vì vậy, tôi nghĩ rằng có lẽ tôi có thể sử dụng dấu mũ (^) cho mục đích này, nhưng sau khi sử dụng nó trong:

for i in 0..10 
    puts "#{i} #{1^i}\n" 
end 

tôi có một số kết quả thực sự sôi nổi

0 - 1 
1 - 0 
2 - 3 
3 - 2 
4 - 5 
5 - 4 
6 - 7 
7 - 6 
8 - 9 
9 - 8 
10 - 11 

Các mô hình duy nhất tôi thấy là - 1 trên một số lẻ và +1 trên một số chẵn, nhưng sau đó khi tôi cố gắng:

for i in 0..10 
    puts "#{i} #{2^i}\n" 
end 

tôi nhận được:

0 - 2 
1 - 3 
2 - 0 
3 - 1 
4 - 6 
5 - 7 
6 - 4 
7 - 5 
8 - 10 
9 - 11 
10 - 8 

wth! Vì vậy, sau đó tôi tiếp tục lên đến 4^i và vẽ chúng, 1^i & 3^i xuất hiện với decent patterns nhưng 2^i & 4^i chỉ là tất cả các nơi mà không có mô hình có thể nhìn thấy (mặc dù rất khó) với chỉ 11 âm mưu điểm, vì vậy tôi đã đến với bạn phụ nữ và gents hỏi bạn:

Điều gì trên trái đất là ^ được sử dụng cho ?!

+0

Tôi đoán đó là toán tử XOR. – Gumbo

+1

Đôi khi tôi không nhận được SO cộng đồng. Tại sao câu hỏi http://stackoverflow.com/questions/11464250/using-in-ruby ngớ ngẩn này lại nhận được +2 phiếu bầu, trong khi câu hỏi này tiếp tục nhận được sự phản đối? – ted

+0

@ted Các câu hỏi được giảm bớt để được nghiên cứu kém, không bao gồm đủ thông tin hoặc khó hiểu. Đây là một trường hợp trước đây, vì tìm kiếm trên web nhanh chóng cho "nhà điều hành mạng ruby" sẽ trả lời câu hỏi (với câu hỏi tràn ngăn xếp, không ít hơn). – coreyward

Trả lời

18

Trong hầu hết các ngôn ngữ lập trình, ^ là toán tử XOR (Exclusive Or in Wikipedia). XOR là một trong những hoạt động thiết yếu nhất trong CPU, nó thường được sử dụng để đăng ký không (nghĩ về a ^= a) bởi vì nó là nhanh và có một opcode ngắn.

Đối với chức năng nguồn, bạn phải sử dụng ví dụ: ** (ví dụ trong ruby), java.lang.Math.pow, math.pow, pow, vv

Trong thực tế, tôi không thể đặt tên cho một ngôn ngữ lập trình có sử dụng ^. Nó được sử dụng trong LaTeX để định dạng (như superscript, không phải chức năng quyền lực, kỹ thuật). Nhưng hai biến thể tôi thấy mọi lúc là ** (như chức năng nguồn có liên quan trực tiếp đến phép nhân) và pow(base, exp).

Lưu ý rằng bạn có thể tính toán lũy thừa số nguyên của 2 lần sử dụng nhanh hơn.

+4

Nếu bạn định trả lời câu hỏi Ruby, có thể thận trọng khi đưa cú pháp Ruby, chứ không phải Java và các bản ghi khác, toán tử số mũ trong Ruby là '**'. – coreyward

+0

Tôi đã sử dụng Ruby một lần duy nhất, một thời gian trước đây. Đó là hành vi của XOR là đủ rõ ràng. Cảm ơn, tôi sẽ thêm cái này. –

+1

'3 << 4 cực kỳ nhanh, nhanh hơn 3 ** 16' Bạn đã kiểm tra? Tôi giả sử ngôn ngữ kịch bản như python và ruby ​​thực hiện phép nhân nhị phân/powering; – ted