• <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++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::

            int n = -2147483648;

                    如此簡單的一句代碼,居然出現(xiàn)了警告?-2147483648是32位int類型可以存儲的最小整型值,為什么會出項警告呢。在VC++6.0控制臺程序下出現(xiàn)如下警告:warning C4146: unary minus operator applied to unsigned type, result still unsigned。在C-Free中出現(xiàn):c:55: warning: decimal constant is so large that it is unsigned。

                    上網(wǎng)查了下,發(fā)現(xiàn)了原因:
                    一元負運算符應(yīng)用于無符號類型,結(jié)果仍為無符號類型。無符號類型只能保存非負值,所以一元負(非)應(yīng)用于無符號類型時通常無意義。操作數(shù)和結(jié)果都是非負的。 
                    實際上,當(dāng)程序員試圖表達最小整數(shù)值-2147483648 時,發(fā)生此問題。該值不能寫為-2147483648,因為表達式處理分兩個步驟: 
                    計算數(shù)字2147483648。因為2147483648 大于最大整數(shù)值2147483647,所以其類型不是int,而是unsigned int。 
                    將一元負應(yīng)用于該值,得到無符號結(jié)果,該結(jié)果碰巧是 2147483648。無符號類型的結(jié)果可能導(dǎo)致意外行為。如果在比較中使用該結(jié)果,則可使用無符號比較,而不能出現(xiàn)另一個操作數(shù)是 int 時。這解釋了下面的示例程序只輸出一行的原因。 
                    預(yù)期的第二行為:1 is greater than the most negative int,但未輸出,因為((unsigned int)1) > 2147483648為假。 
            #include <stdio.h>

            main()
            {

                check(
            -10);
                check(
            1);

                
            return 0;
            }


            void check(int i) 

                
            if (i > -2147483648)
                printf(
            "%d is greater than the most negative int\n", i); 
            }
                    
                    輸出結(jié)果:


                    上面的解釋省略了一些細節(jié),我來補充下。在if  (i > -2147483648)中,由于i為int類型,而-2147483648為unsigned int類型,所有i就會被提升為unsigned int類型,這就是C語言的整型提升。-10提升為unsigned int類型后,其值肯定會大于2147483648,因此第一條語句會打印出來。當(dāng)把正整數(shù)(比如本實驗中的1)提升為unsigned int類型時,其值是不變的,因此肯定比2147483648要小,所有第二條語句不會打印。

                  那如何來解決這個可惡的警告呢。網(wǎng)上說:可以通過從 Limits.h 使用INT_MIN(一個宏定義) 來避免C4146 警告。INI_MIN宏有如何的魔力,竟然能夠消除這個警告呢。打開源文件一看,原來是這樣:
            #define INT_MAX        2147483647
            #define INT_MIN        (-INT_MAX-1)

                    哦,原來這樣。因此,我們又可以這樣賦值最小負整數(shù):
            int n = -2147483647 - 1;
            posted on 2008-08-01 16:40 小烏龜 閱讀(1345) 評論(0)  編輯 收藏 引用 所屬分類: C&C++
            99久久99这里只有免费费精品| 97久久香蕉国产线看观看| 99热成人精品免费久久| 久久中文字幕人妻丝袜| 中文字幕久久亚洲一区| 久久ZYZ资源站无码中文动漫| 青青草国产成人久久91网| 日本久久久久久久久久| 久久精品aⅴ无码中文字字幕重口| 91精品日韩人妻无码久久不卡| 亚洲欧洲精品成人久久曰影片| 国内精品久久久久久99| 久久九色综合九色99伊人| 色婷婷综合久久久久中文一区二区| 成人久久久观看免费毛片| 国产精品美女久久福利网站| 99久久精品免费看国产| 久久精品无码一区二区无码| 亚洲欧美久久久久9999| 国产ww久久久久久久久久| 日韩AV无码久久一区二区| 思思久久好好热精品国产| 精品国产乱码久久久久久浪潮| 日韩精品久久久久久免费| 欧美大战日韩91综合一区婷婷久久青草| 97久久婷婷五月综合色d啪蜜芽| 久久精品国产精品亚洲人人| 久久久久亚洲av无码专区| 久久午夜无码鲁丝片| 亚洲国产精品无码久久久蜜芽| 91精品日韩人妻无码久久不卡| 久久影院亚洲一区| 一本大道加勒比久久综合| AV狠狠色丁香婷婷综合久久| 久久天天躁狠狠躁夜夜96流白浆 | 欧美午夜A∨大片久久 | 久久超乳爆乳中文字幕| 久久综合精品国产二区无码| 色欲av伊人久久大香线蕉影院| 久久久国产99久久国产一| 国内精品久久国产|