2010-03-26 22 views
5

Có bao giờ lý do để nghĩ rằng các toán tử bit-shift (và đã ký) và >>> (chưa ký) trong Java sẽ thực hiện khác nhau không? Tôi không thể phát hiện bất kỳ sự khác biệt nào trên máy của tôi.Bao giờ bất kỳ hiệu suất nào khác nhau giữa Java >> và >>> toán tử dịch chuyển phải không?

Đây hoàn toàn là câu hỏi học thuật; nó sẽ không bao giờ là nút cổ chai tôi chắc chắn. Tôi biết: tốt nhất là viết những gì bạn có ý nghĩa quan trọng nhất; sử dụng >> để chia cho 2, ví dụ.

Tôi giả định rằng kiến ​​trúc có các hoạt động được thực hiện như một hướng dẫn.

+0

Tôi nghĩ cả hai sẽ được chuyển đổi thành các chỉ lệnh CPU gốc (logic/số học phải dịch) cuối cùng cũng có chu kỳ tương tự. – kennytm

+4

Không, sử dụng '/ 2' để chia cho 2. –

+1

+1 để tôi tìm kiếm toán tử >>>. Và đừng đánh giá thấp sự tối ưu hóa của trình biên dịch. Thường thì tối ưu hóa ở cấp độ này thậm chí có thể làm mọi thứ tồi tệ hơn. – Thirler

Trả lời

3

No. Trình biên dịch của bạn sẽ dịch các mã này sang bytecode và JVM sẽ giải thích bytecode cho kiến ​​trúc của bạn. Tôi nghĩ rằng nó là an toàn để giả định rằng kiến ​​trúc của bạn có một tập lệnh bao gồm cả hai hoạt động được thực hiện trong vài chu kỳ đồng hồ.

Dù sao, có sự khác biệt về hành vi của các nhà khai thác này, vì vậy nó không giống như bạn chỉ có thể trao đổi chúng.

+0

@Tim Bender: +1 ... Trong thế giới x86, * ">> 1" * vì P4 chỉ là một chu kỳ và vì kiến ​​trúc P6 * ">> bất kỳ" * chỉ là một chu trình AFAIK. – SyntaxT3rr0r

+0

Tôi nghĩ đó là câu hỏi của tôi: các kiến ​​trúc chung có thực hiện cả hai như một chỉ dẫn? Và có như tôi đã nói điều này chỉ áp dụng trong trường hợp hành vi là giống hệt nhau (số nguyên không âm). –

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