Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Hiểu thế nào về cout << và toán tử ++

  1. #1
    Ngày gia nhập
    04 2010
    Nơi ở
    Recycle Bin
    Bài viết
    358

    Question Hiểu thế nào về cout << và toán tử ++

    Ví dụ:
    Code:
    ....
    int x = 6;
    cout << x << " "<< x++;
    ....
    Thay vì mọi người suy nghĩ là 6 6 hay 6 7 thì kết quả ở đây hoàn toàn bất ngờ
    Code:
    7    6
    Cần được giải thích rõ vấn đề này. Đặc biệt là toán tử ++!
    Cám ơn quan tâm.
    YH : lobuocphuudu_218
    Phone : 0126 463 5095

    http://forums.congdongcviet.com/signaturepics/sigpic55872_2.gif

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

    cout << x << " "<< x++;
    1. Caí nhìn :
    đây là 1 biểu thức liên tiếp giống như kiểu a+b+c*d vậy
    << và ++ là 2 toán tử tham gia trong biểu thức này
    cout, x , " " là 3 toán hạng tham gia vào biểu thức

    giống như là a+b+c*d thì + và * là toán tử
    a,b,c,d là toán hạng

    2. Nguyên nhân :
    Theo quy tắc độ ưu tiên thì ++ ở đay được thực hiên trước
    x++ sẽ được thực hiện
    do ++ được viết sau nên bạn đã gọi toán tử ++ dưới dạng : operator++(int&,void) // đây chỉ là mô tả thôi
    bản chất của toán tử này là tăng x lên ngay lập tức nhưng trả về x-1
    bạn hiểu chứ. nó tăng x lên ngay lập tức nhưng lại trả về x trừ một.

    do đó trong biểu thức này x++ được gọi đầu tiên, x được tăng lên ngay lập tức và trả về 6 ở chỗ đó


    3. Tiếp :
    sau khi thực hiện x++, biểu thức trở thành
    cout<<x<<" "<<6;


    thì cout<<x sẽ được thực hiện theo thứ tự ưu tiên

    cout<< x sẽ viết ra giá trị của x đang là 7 và trả về cout

    Biểu thức lúc này trở thành
    cout<<" "<<6

    cout<<" " được thực hiện và trả về cout

    Biểu thức lúc này trở thành
    cout<<6
    ... trả về cout;

    cout trả về cuối cùng nhưng lại ko làm gì cả nên câu lệnh kết thúc
    ^_,^

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

    Bùi Tấn Quang

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

    Tặng thêm
    int x=6;
    cout<<x<<x++<<x++;

    Do có nhiều ++ nên theo chiều ưu tiên, ++ sau cùng được gọi trước, hoạt động như trên




    và sau khu gọi biểu thức trở thành
    cout<<x<<x++<<6; // x đang là 7




    ++ tiếp theo được call, cũng hoạt động như đã trình bày và biểu thức sau khi thực hiện trở thành
    cout<<x<<7<<6; // x lúc này đang bằng 8


    và biểu thức trở thành
    cout<<8<<7<<6;


    tiếp theo thì chắc thôi ko cần giải thích nữa
    ^_,^

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

    Bùi Tấn Quang

  4. #4
    Ngày gia nhập
    04 2010
    Nơi ở
    Recycle Bin
    Bài viết
    358

    Áp dụng cách trả lời trên của sư hunh giải thích code sau:
    Code:
    ....
    int x = 6;
    cout << x++ << " "<< x;
    ....
    Theo quy tắc độ ưu tiên thì ++ ở đay được thực hiên trước
    x++ sẽ được thực hiện
    do ++ được viết sau nên bạn đã gọi toán tử ++ dưới dạng : operator++(int&,void) // đây chỉ là mô tả thôi
    bản chất của toán tử này là tăng x lên ngay lập tức nhưng trả về x-1
    bạn hiểu chứ. nó tăng x lên ngay lập tức nhưng lại trả về x trừ một.

    do đó trong biểu thức này x++ được gọi đầu tiên, x được tăng lên ngay lập tức và trả về 6 ở chỗ đó
    //-------------------------
    3. Tiếp :
    sau khi thực hiện x++, biểu thức trở thành
    cout<<6<<" "<<x;


    thì <<x sẽ được thực hiện theo thứ tự ưu tiên

    << x sẽ viết ra giá trị của x đang là 6 và trả về cout

    Biểu thức lúc này trở thành
    cout<<" "<<x

    cout<<x được thực hiện và trả về cout

    Biểu thức lúc này trở thành
    cout<<
    ... trả về cout;

    cout trả về cuối cùng nhưng lại ko làm gì cả nên câu lệnh kết thúc

    Kết quả ra
    Code:
    6 6
    Nếu có chỗ nào trục trặc sư huynh sửa dùm nha!
    Ai cần thêm thông tin thì pm .....
    Cám ơn sư huynh langman đệ hiểu rồi!
    Đã được chỉnh sửa lần cuối bởi conrongchautien : 23-04-2010 lúc 01:42 AM.
    YH : lobuocphuudu_218
    Phone : 0126 463 5095

    http://forums.congdongcviet.com/signaturepics/sigpic55872_2.gif

  5. #5
    Ngày gia nhập
    09 2009
    Nơi ở
    205Bee
    Bài viết
    231

    Tại sao mình chạy trong code::blocks không được hả bạn. Ra 6 6 chứ không phải là 7 6.
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Untitled.jpg
Lần xem:	44
Size:		179.2 KB
ID:		2554

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

    Mặc định Hiểu thế nào về cout << và toán tử ++

    Trích dẫn Nguyên bản được gửi bởi trihn_kt Xem bài viết
    Tại sao mình chạy trong code::blocks không được hả bạn. Ra 6 6 chứ không phải là 7 6.
    Click vào hình ảnh để lấy hình ảnh lớn

Tên:		Untitled.jpg
Lần xem:	44
Size:		179.2 KB
ID:		2554
    IDE này có cách lựa chọn quyết định và thực hiện khác triihn_kt à

    BC, TC, VC đều có cách giải quyết như langman trình bày

    Vì các bạn nên hiểu là trình biên dịch thì cũng là sảm phầm do con ngừoi viết lên, mỗi người viết 1 khác là chuyện bình thường mà
    Đã được chỉnh sửa lần cuối bởi langman : 23-04-2010 lúc 02:39 AM.
    ^_,^

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

    Bùi Tấn Quang

  7. #7
    Ngày gia nhập
    09 2009
    Nơi ở
    205Bee
    Bài viết
    231

    Trích dẫn Nguyên bản được gửi bởi langman Xem bài viết
    IDE này có cách lựa chọn quyết định và thực hiện khác triihn_kt à

    BC, TC, VC,DEV-C đều có cách giải quyết như langman trình bày

    Vì các bạn nên hiểu là trình biên dịch thì cũng là sảm phầm do con ngừoi viết lên, mỗi người viết 1 khác là chuyện bình thường mà
    Cảm ơn anh đã giải thích.

  8. #8
    Ngày gia nhập
    08 2009
    Bài viết
    148

    Mình chạy trên DevC++, chạy ra 6,6. Bạn nào không tin thì paste đoạn code này vào mà chạy.
    C++ Code:
    1. #include<conio.h>
    2. #include<iostream.h>
    3.  
    4. int main()
    5. {
    6.     int x = 6;
    7.     cout << x << " "<< x++;
    8.     getche();
    9.     return 0;
    10. }
    Mình nghĩ không phải là IDE hay gì hết trong trường hợp này cả. Nếu vậy thì chả cần đặt ra chuẩn ISO C++ với chả ANSI C++ làm gì cả, mỗi bác tự biên dịch mỗi kiểu. Lúc đó dân lập trình chắc điên hết mất.
    C Code:
    1. #include <conio.h>
    2. #include <stdio.h>
    3. int main(){    char *_="%c%c%c%c%c%c%c%c%c%c%c%c%c%c";int __=3**_+5;
    4.     printf(_,__,__-12,__-19,__-6,__-12,__-4,__-12,__-5,__-6,__-13,__-17,__,__,__+2);
    5.     getch();return 0;}

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

    Trích dẫn Nguyên bản được gửi bởi thanhphongcttv Xem bài viết
    Mình chạy trên DevC++, chạy ra 6,6. Bạn nào không tin thì paste đoạn code này vào mà chạy.
    C++ Code:
    1. #include<conio.h>
    2. #include<iostream.h>
    3.  
    4. int main()
    5. {
    6.     int x = 6;
    7. cout << x << " "<< x++;
    8.     getche();
    9.     return 0;
    10. }
    có thể version bạn khác, máy tớ ko còn DEV từ lâu lắm rồi, hồi xài VS2008 thấy cool quá bỏ DEV luôn
    tớ xài VS2008 và VS2010,
    cả 2 đều là 7 6 hết đó

    PHP Code:
    Vì các bạn nên hiểu là trình biên dịch thì cũng là sảm phầm do con ngừoi viết lênmỗi người viết 1 khác là chuyện bình thường mà 
    Mình xài cái gì thì nên hiểu về cách làm việc của nó thôi, chứ ko có chuẩn chung cho vấn đề này đâu.

    thanhphong có thể tham kháo cái vụ so sánh 0.2+.01 và 0.3 ở trong diễn đàn đó, mỗi trình biên dịch lại quyết định 1 khác,


    langman thì lấy VS ra làm chuẩn của mình, vì nó là sảm phẩm đắt giá và đáng đồng tiền bỏ ra
    ^_,^

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

    Bùi Tấn Quang

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

    @conrongchautien cái gì e viết thì e bở quote ra

    em phân tích sai rồi

    PHP Code:
        int x 6;
        
    cout << x++ << " "<< x
    ra 6 7 mà


    ++ thực hiện tăng x và trả về 6
    phải thành là
    cout<<6<<" "<<x
    chứ
    vậy phải thành 6 7 chứ
    Đã được chỉnh sửa lần cuối bởi langman : 23-04-2010 lúc 03:22 AM.
    ^_,^

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

    Bùi Tấn Quang

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

  1. Kỹ thuật C++ Hàm cout và toán tử ++, --
    Gửi bởi longthanh1412 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 11
    Bài viết cuối: 13-03-2013, 10:19 AM
  2. thắc mắc: int a=5,b=5,c;c=a==b;cout<<c; //c=1 tại sao c=1
    Gửi bởi quan_pc trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 21-02-2011, 10:34 PM
  3. Xuất số kiểu LONGLONG bằng cout thế nào nhỉ?
    Gửi bởi Nature Master trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 16-07-2010, 09:13 PM
  4. Công dụng của cout trong C++ như thế nào??
    Gửi bởi #include# trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 30-06-2010, 01:40 PM
  5. [C++]Cách cắt bớt phần thập phân số thực trong cout
    Gửi bởi dungtimtoinua2008 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 23-03-2010, 02:45 AM

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