BIT位操作用途

來源:互聯網
上載者:User
Bit的思路是很自然而且緊湊的。

1.如果業務數固定,比如少於32項業務,那麼一個32位的整型值足以表達:

定義枚舉類型:

enum Business
{
BUSINESS_1 = 0x00000001;
BUSINESS_2 = 0x00000002;
BUSINESS_3 = 0x00000004;
BUSINESS_4 = 0x00000008;
BUSINESS_6 = 0x00000010;
BUSINESS_7 = 0x00000020;
...
BUSSNESI_32 = 0x80000000;
}

則可進行如下的組操作:

Business businessGroup = BUSINESS_1 | BUSINESS_6 | BUSINESS_23; // 建立一個業務組,包含了業務1,業務6和業務23
businessGroup |= BUSINESS_19; // 添加業務19至該業務組中
if (businessGroup & BUSINESS_21) ... // 判斷業務21是否在該組中
businessGroup &= ~BUSINESS_6; // 從該組中刪除業務6
businessGroup ^= BUSINESS_9; // “反轉”操作:如果業務9在組中,則從群組移除之;否則將業務9加入組中。
businessGroup = 0; // 清空所有業務
businessGroup = ~0U; // 添加所有業務

2.如果如樓主所言,業務數量不固定,甚至有可能在運行期動態增加業務的話,那麼一個基本的數值肯定已經無法滿足需求。可以封裝一個class來處理這樣的情況。

如果考慮到節省空間的,建議樓主可以用C++的vector 來建立一個bool類型的vector:
vector businessGroup;
businessGroup.resize(100); // 該組可包含100項業務
businessGroup[10] = true; // 將業務10加入該組
businessGroup[15] = false; // 將業務15從群組移除
businessGroup.resize(150); // 動態增加業務總數至150
...

之所以使用vector ,有一個好處就是C++特別對vector 做了儲存最佳化:用一個bit來表示一個元素。因此理論上一個包含32元素size的vector 在元素儲存方面只佔用32位也就是四個位元組的空間,和你用一個整數表示的效率是一樣的。(當然具體編譯器可能會安插一些用於對齊的bits或額外的class資訊等.)

這個方式兼具效率與直觀度,樓主不妨考慮將其封裝成為一個BusinessGroup的類。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.