• <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++ Programmer

            天行健,君子以自強不息; 地勢坤,君子以厚德載物

            C++中的位域(bit-filed):一種節省空間的成員

               有一種被稱為位域(bit-field) 的特殊的類數據成員,它可以被聲明用來存放特定數目的位。位域必須是有序數據類型。它可以有符號也可以無符號。例如:

            class File {
            // 
            unsigned int modified : 1// 位域 (bit-field)
            }
            ;

               
               位域標識符后面跟有一個冒號,然后是一個常量表達式指定位數。例如modified 是一個只有一位構成的位域。
               在類體中相鄰定義的位域,如果可能的話,它們會被放在同一個整數的連續位中,并以此提供空間壓縮。例如,在下列聲明中5 個位域被存儲在單個unsigned int 中,它首先與位域mode 相關聯。

            typedef unsigned int Bit;
            class File {
            public:
            Bit mode: 
            2;
            Bit modified: 
            1;
            Bit prot_owner: 
            3;
            Bit prot_group: 
            3;
            Bit prot_world: 
            3;
            // 
            }
            ;

               
               位域在內存中的位置是從低位向高位放置的,比如mode在Bit的最低兩位(二進制數0b0000000000000011中兩個1的位置)。
               對于位域的訪問方式與其他類數據成員相同。例如,類的私有位域只能在類的成員函數和友元中被訪問:

            void File::write()
            {
            modified 
            = 1;
            // 
            }

            void File::close()
            {
            if ( modified )
            //  內容從略
            }

               
               下面的例子說明了怎樣使用大于1 位的位域

            enum { READ = 01, WRITE = 02 }// 文件模式
            int main() {
            File myFile;
            myFile.mode 
            |= READ;
            if ( myFile.mode & READ )
            cout 
            << "myFile.mode is set to READ\n";
            }

               
               通常情況下我們會定義一組inline 成員函數,來測試每個位域成員的值。例如,類File可以定義成員isRead()和isWrite()

            inline int File::isRead() return mode & READ; }
            inline 
            int File::isWrite() return mode & WRITE; }
            if ( myFile.isRead() ) /*  */


               有了這些成員函數,現在位域可以被聲明為類File 的私有成員。
               由于取地址操作符& 不能被應用在位域上,所以也沒有能指向類的位域的指針。位域也不能是類的靜態成員。
               C++標準庫提供了一個bitset 類模板,它可以輔助操縱位的集合。在可能的情況下應盡可能使用它來取代位域。

            posted on 2009-07-16 11:50 Saga 閱讀(2269) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

            導航

            <2025年8月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久亚洲AV成人网人人网站| 久久久久人妻一区二区三区| 99久久久精品| 久久精品国产精品亜洲毛片| 色天使久久综合网天天| 国产精品久久久久久| 久久婷婷五月综合色奶水99啪| 久久99亚洲网美利坚合众国| 久久亚洲欧洲国产综合| 国产V综合V亚洲欧美久久| 久久久精品人妻无码专区不卡| 7777精品久久久大香线蕉| 久久精品国产一区二区电影| 国产精品久久久久jk制服| 久久久久久国产a免费观看黄色大片 | 久久精品9988| 久久国产成人午夜AV影院| www久久久天天com| 久久大香萑太香蕉av| 久久精品国产99久久久香蕉| 久久久久99精品成人片试看| 色综合久久中文色婷婷| 亚洲国产精品无码久久久秋霞2| 久久久久国产一区二区| 国产精品日韩深夜福利久久| 国产成人无码久久久精品一| 无码人妻久久一区二区三区| 久久亚洲国产精品成人AV秋霞 | 国产一区二区三精品久久久无广告 | 国产精品久久久久乳精品爆| 欧美牲交A欧牲交aⅴ久久| 一本一本久久A久久综合精品| 久久超乳爆乳中文字幕| 久久影院综合精品| 91精品国产91久久综合| 欧美日韩中文字幕久久伊人| 色综合久久综精品| 久久精品国产福利国产琪琪| 亚洲精品久久久www| 久久久久久伊人高潮影院| 久久久www免费人成精品|