Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: phân biệt sự khác biệt giữa if và toán tử 3 ngôi tenary operator

  1. #1
    Ngày gia nhập
    04 2010
    Bài viết
    30

    Mặc định phân biệt sự khác biệt giữa if và toán tử 3 ngôi tenary operator

    Cần phân biệt sự khác nhau khi sử dụng cấu trúc rẽ nhánh if và toán tử 3 ngôi tenary operator như thế nào!

    Rất mong các bạn giúp đỡ !
    ...
    Và sao không là gió, là mây để thấy trời bao la?
    Và sao không là phù sa dâng mỡ màu cho hoa?
    Sao không là bài ca của tình yêu đôi lứa?
    Sao không là mặt trời gieo hạt nắng vô tư?
    ...

  2. #2
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Khác nhau:
    + if: từ khóa
    + 3 ngôi so sánh: toán tử
    None!

  3. #3
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    giả sử em có
    int a=2,b=3,c=9;

    + đây là code 1 :
    if (b) a=2;else a=0;
    code này được sinh mã như sau :
    cmp b,0 // gọi toán tử cmp để so sánh b với 0
    je main+0B5h // jump equal : nếu bằng nhau thì nhảy đến code tại địa chỉ có độ lệch so với hàm main là 0xB5 , ở đây nó so sánh b với 0, nếu bằng nhau nó cho nhảy đến đoạn code của nhánh else mov a,0
    mov a,2 // gán a=2
    jmp main+0BCh //lệnh jump ở đây để nhảy qua nhánh if ở bên trên
    mov a,0 //gán a=0

    nó sẽ tạo ra 2 đoạn mã trong code segment ( ở ví dụ trên là ở đoạn có độ lệch so với hàm main là 0xB5 và 0xBC

    +còn nếu a=b?2:0 sẽ sinh mã là
    mov eax,b // cho giá trị b vào thanh ghi eax
    neg eax // negate phủ định giá trị tồn tại trong thanh ghi , đơn giản là đảo dấu b đi
    sbb eax,eax // eax - eax = 0, ...
    and eax,2 // and eax với 2 nhằm mục đích ở đây eax sẽ bằng 0 hoặc = 2
    mov a,eax // gán a=eax

    Đặc biệt :
    + nếu a=b?2:1 thì sinh mã là
    xor eax,eax // cho eax bằng 0, gán lại giá trị eax ấy mà
    cmp b,0
    setne al
    add eax,1
    mov a,eax

    + nếu a=b?2:9 lại sinh mã là
    mov eax,b
    neg eax
    sbb eax,eax
    and eax,0FFFFFFF9h
    add eax,9
    mov a,eax

    +nếu a=b?2:c lại cho sinh mã là
    cmp b,0
    je main+0D5h
    mov ebp-154h,2
    jmp main+0DEh
    mov eax,c
    mov ebp-154h,eax
    mov ecx,ebp-154h
    mov a,ecx

    =>> toán tử tenary cho sinh mã khá linh hoạt tùy vào tình huống



    P/S thx to tadius đã support
    Đã được chỉnh sửa lần cuối bởi langman : 19-05-2010 lúc 10:01 AM.
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  4. #4
    Ngày gia nhập
    04 2010
    Bài viết
    30

    cảm ơn an langman nhiều nhé! không ngờ if và toán tử 3 ngôi khác nhau như thế.thế mà từ trước đến giờ cứ coi chúng như 2 cái tên của cùng 1 công việc !
    hihi ! thanks anh
    ...
    Và sao không là gió, là mây để thấy trời bao la?
    Và sao không là phù sa dâng mỡ màu cho hoa?
    Sao không là bài ca của tình yêu đôi lứa?
    Sao không là mặt trời gieo hạt nắng vô tư?
    ...

Các đề tài tương tự

  1. Hỏi về toán tử gán(operator=)
    Gửi bởi tung_ct trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 04-12-2011, 10:25 PM
  2. sử khác biệt giữ String::operator += ()va String::operator +() khi sử dung char *p
    Gửi bởi sasadudu trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 08-04-2011, 03:28 PM
  3. toán tử Operator>> và Operator<< trên VC++6.0?
    Gửi bởi newbie.blind trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 8
    Bài viết cuối: 05-10-2010, 03:43 PM
  4. cho mình hỏi về toán tử operator???
    Gửi bởi cat_street447 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 15
    Bài viết cuối: 11-05-2010, 10:16 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn