• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            小烏龜

            在夢想的道路上還能走多遠

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            什么是運算符的結合性?

            當兩個運算符的優先級一樣的時候,先算哪一個的問題,這就是結合性。

            首先要明白的是:結合性對于兩個或兩個以上的優先級一樣的運算符才有意義。
            比如:
            = x + y - z;

            由于算術運算符的結合性是從左至右,因此上式等價于:

            = (x + y) - z;

            再比如:
            #include <stdio.h>

            main()
            {
                
            int s[2= {1152};
                
            int *ptr = s;

                printf(
            "%d\n"*++ptr);
                
            return 0;
            }
            答案是:52
            由于*和++的結合性從右至左,因此*++ptr等價于*(++ptr)

            在網上查詢資料的時候發現:很多人問條件運算符的結合性的問題。
            int i = 3;
            int k = 0;

            = (i++<0? 9 : ((i==3? 10 : 8);

            cout 
            <<k;

            k = (3<0)?9:((i==3)?10:8);
            之后i變成4
            ----〉
            3<0是假,所以k不為9,繼續計算下一步。
            k = ((i==3)?10:8);
            ----〉
            我們知道這時候i等于4,所以,((i==3)為假。
            所以k不等于10,而是等于8嘛
            k = ((i==3)?10:8);
            ----〉
            k = 8

            有人問,那條件運算符的結合性且不是從左至右了,這與書上寫的從右至左不符?
            其實上面根本牽涉不到什么結合性的問題,只有一個運算符會牽涉到結合性嗎。而條件運算符是C中規定計算順序的四個運算符之一,因此上面的計算順序是完全正確的。

            posted on 2008-07-28 19:44 小烏龜 閱讀(2079) 評論(7)  編輯 收藏 引用 所屬分類: C&C++

            評論

            # re: C中運算符結合性 2008-08-30 16:53 siki
            懂了..~~~3q  回復  更多評論
              

            # re: C中運算符結合性 2008-12-26 05:46 山師助教lizh1970
            當兩個運算符的優先級一樣的時候,先算哪一個的問題,這就是結合性。

            其實上面根本牽涉不到什么結合性的問題,只有一個運算符會牽涉到結合性嗎。

            我印象中條件運算符優先級相同沒有其它運算符,只有它一個.如果k = (i++<0) ? 9 : ((i==3) ? 10 : 8);可以視為只有一個運算符,則與"當兩個運算符的優先級一樣的時候,先算哪一個的問題,這就是結合性。"不符.

            實際上運算符結合性是運算符與變量結合的順序,而與先算哪一個(即運算順序)無關.例如:
            k= (i++<0) ? 9 : i==3 ? 10 : 8;
            中有兩個? : 運算符,其結合性為從右至左即可以變為

            k = (i++<0) ? 9 : (i==3 ? 10 : 8);
            由此可以類推三個? : 運算符
            k = (i++<0) ? 9 : i==3 ? 10 : i==2 ? 11 : 12 ;

            運算符與變量結合的順序為

            k = (i++<0) ? 9 : i==3 ? 10 :( i==2 ? 11 : 12 ) ;
            k = (i++<0) ? 9 : (i==3 ? 10 :( i==2 ? 11 : 12 ) );



              回復  更多評論
              

            # re: C中運算符結合性 2008-12-26 06:28 山師助教lizh1970
            小烏龜的計算方法還是對的  回復  更多評論
              

            # re: C中運算符結合性 2009-01-30 20:53 .。
            3Q  回復  更多評論
              

            # re: C中運算符結合性 2009-05-11 13:39 gump
            結合與求值的順序  回復  更多評論
              

            # re: C中運算符結合性 2009-06-18 12:08 guest
            a=10;b=20;c=30;d=40;e=50;f=60;g=70;
            h=++a?++b:++c?++d:++e?++f:++g;
            printf("a=%d b=%d c=%d d=%d e=%d f=%d g=%d",a,b,c,d,e,f,g);

            輸出的結果為:
            a=11 b=21 c=30 d=40 e=50 f=60 g=70


            不知如何解釋?謝謝!  回復  更多評論
              

            # re: C中運算符結合性 2009-07-06 21:23 過客
            在VC6.0中,是這樣運算的,首先計算第一個雙目運算符 ,完成后不在進行下次運算,因為++a等于3,是真,所以不在進行運算
              回復  更多評論
              

            国产亚洲美女精品久久久| 久久国产美女免费观看精品| 午夜久久久久久禁播电影 | 久久亚洲精品成人AV| 一本久久精品一区二区| 久久久久久精品久久久久| 久久AV高清无码| 亚洲?V乱码久久精品蜜桃| 无码日韩人妻精品久久蜜桃| 国产 亚洲 欧美 另类 久久| 综合久久一区二区三区| 97久久精品无码一区二区天美| 99久久免费国产精品| 亚洲国产精品无码久久SM| 亚洲一本综合久久| 亚洲国产视频久久| 亚洲成人精品久久| 国产69精品久久久久久人妻精品| 久久国产高清字幕中文| 亚洲第一极品精品无码久久| 狠狠久久综合| 伊人丁香狠狠色综合久久| 久久精品国产亚洲av日韩| 久久天天躁狠狠躁夜夜不卡| 97超级碰碰碰碰久久久久| 久久99国产精一区二区三区| 亚洲精品无码久久千人斩| 午夜精品久久久久久影视riav| 大香网伊人久久综合网2020| 久久99热国产这有精品| 久久精品中文字幕无码绿巨人| 久久亚洲AV无码精品色午夜麻豆| 久久激情五月丁香伊人| 久久精品国产亚洲Aⅴ香蕉| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 狠狠色综合网站久久久久久久高清| 99久久无码一区人妻| 欧美日韩精品久久久久| 久久亚洲2019中文字幕| 欧美粉嫩小泬久久久久久久| 欧美性猛交xxxx免费看久久久 |