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

            天行健,君子以自強(qiáng)不息; 地勢(shì)坤,君子以厚德載物

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

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

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

               
               位域標(biāo)識(shí)符后面跟有一個(gè)冒號(hào),然后是一個(gè)常量表達(dá)式指定位數(shù)。例如modified 是一個(gè)只有一位構(gòu)成的位域。
               在類體中相鄰定義的位域,如果可能的話,它們會(huì)被放在同一個(gè)整數(shù)的連續(xù)位中,并以此提供空間壓縮。例如,在下列聲明中5 個(gè)位域被存儲(chǔ)在單個(gè)unsigned int 中,它首先與位域mode 相關(guān)聯(lián)。

            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;
            // 
            }
            ;

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

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

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

               
               下面的例子說明了怎樣使用大于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";
            }

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

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


               有了這些成員函數(shù),現(xiàn)在位域可以被聲明為類File 的私有成員。
               由于取地址操作符& 不能被應(yīng)用在位域上,所以也沒有能指向類的位域的指針。位域也不能是類的靜態(tài)成員。
               C++標(biāo)準(zhǔn)庫提供了一個(gè)bitset 類模板,它可以輔助操縱位的集合。在可能的情況下應(yīng)盡可能使用它來取代位域。

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

            導(dǎo)航

            <2009年12月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            統(tǒng)計(jì)

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久婷婷午色综合夜啪| 2021国产精品午夜久久| 性高湖久久久久久久久| 狠狠精品久久久无码中文字幕| 国产成人无码精品久久久久免费| 国产精品9999久久久久| 欧洲人妻丰满av无码久久不卡 | 久久精品国产2020| 中文字幕无码久久人妻| 日韩美女18网站久久精品| 久久精品成人免费观看97| 国产激情久久久久影院小草| 国产成人精品久久| 久久精品亚洲乱码伦伦中文| 久久精品三级视频| 久久综合视频网站| 日韩欧美亚洲综合久久| 亚洲乱码精品久久久久.. | 久久免费精品一区二区| 国产精品久久午夜夜伦鲁鲁| 久久99精品国产| 国产精品成人久久久久三级午夜电影 | 无码伊人66久久大杳蕉网站谷歌| 亚洲AV无码成人网站久久精品大| 中文字幕人妻色偷偷久久| 色妞色综合久久夜夜| 久久精品国产精品青草app| 久久精品中文字幕一区| 久久伊人精品一区二区三区| 久久国产免费观看精品3| 久久最近最新中文字幕大全| 欧美久久久久久午夜精品| 久久久无码精品亚洲日韩京东传媒| 亚洲国产精品18久久久久久| 久久被窝电影亚洲爽爽爽| 深夜久久AAAAA级毛片免费看| 伊人久久大香线焦AV综合影院| 久久er国产精品免费观看2| 欧美久久一级内射wwwwww.| 亚洲∧v久久久无码精品| 国产激情久久久久影院老熟女|