theo dõi

Gần nhất :

Tags

Thống kê câu hỏi

Chuyên mục : Lập trình
Topic : C++
Hỏi lúc:
Lượt xem: 1,282

Toán tử "<" có nhanh hơn "<=" ?

Đặng Phương Quyên Đặng Phương Quyên
 10  02  02
06 bình chọn hữu ích bởi Đỗ Thùy Dương, Dương Hoàng Sơn Võ Sao Khuê ... (tất cả)

Giả sử có 2 phép so sánh:

So sánh 1: a < 90001
So sánh 2: a <= 90000

Thì phép so sánh 1 có nhanh hơn phép so sánh 2 không?

1,282 xem 08 theo dõi 06 hữu ích hỏi –

Bạn biết ai đó có thể trả lời câu hỏi này?. Bạn có thể giúp đỡ bằng cách tìm những người giỏi nhất:

user user user user user

Vũ Huy Khánh Vũ Huy Khánh
 25  01  01
18 bình chọn hữu ích bởi Đỗ Thụy Nhung, Bùi Hà Yên Hoàng Mỹ Tâm ... (tất cả)

Không, nó sẽ không được nhanh hơn trên hầu hết các kiến trúc. Bạn không nói rõ trên kiến trúc nào, nhưng trên x86, tất cả những so sánh không tách rời sẽ được thường được thực hiện trong hai hướng dẫn của máy:

  • Một bài kiểm tra hoặc hướng dẫn cmp, quy định các EFLAGS
  • Và một Jcc chỉ thị nhảy tùy thuộc vào kiểu so sánh và bố trí code
    • jne - Nhảy nếu không bằng nhau --> ZF = 0
    • jz - Nhảy nếu bằng không --> ZF = 1
    • jg - Nhảy nếu lớn hơn --> ZF = 0 và SF = OF
    • ...etc

Ví dụ biên dịch đoạn code:

if (a < b) {
    // Làm công việc 1
}

Sẽ được biên dịch:

mov     eax, DWORD PTR [esp+24]      ; a
cmp     eax, DWORD PTR [esp+28]      ; b
jge     .L2                          ; nhảy nếu a >= b
; Làm công việc 1
.L2:

if (a <= b) {
    // Làm công việc 2
}

Sẽ được biên dịch:

mov     eax, DWORD PTR [esp+24]      ; a
cmp     eax, DWORD PTR [esp+28]      ; b
jg      .L5                          ; nhảy nếu a > b
; Làm công việc 2
.L5:

Như vậy điều khác biệt duy nhất là 1 chỉ thị jg vs 1 jge. Cả 2 đều mất cùng 1 khoảng thời gian như nhau

1,049 xem 18 hữu ích trả lời –