2012-11-03 14 views
0

我想解決一個在C++中使用位操作的問題,但我確實被卡住了。請通過以下查詢來幫助我。支持按位運算的精確的X位大小的變量(C++)

1)是否有可能創建變量的A和B,這些變量的A和B在內存中需要精確到100000位,並且像A & B這樣的操作是有效的?

2)是否有一種快速生成B(100000位)的方法,使其前n位爲0,後m位爲0,其餘爲1? (例如,如果B是10位然後是像0000011000那樣的數字)

+0

你真的指100000位(即12,500字節)嗎?你的問題的答案是你應該在該類上創建一個類和重載操作符來完成你所需要的工作。或者你可以使用現有的類來做同樣的事情。 – john

+0

@john如何超載運算符&? –

+0

假設你的班級被稱爲Bit100000,那麼你只需編寫函數Bit100000操作符&(const Bit100000&x,const Bit100000&y){...}。 – john

回答

3

在回答1時,肯定的是,這是類的意思。只需創建一個包含100,000位(大約12.5K)的類並覆蓋operator&方法(二進制,而不是地址 - 運算符)。

一個良好的開端將是(比方說,我們有兩個整數拿着位掩碼):

BigBits BigBits::operator &(const BigBits &that) const { 
    BigBits bb(*this); 
    bb.array[0] = this->array[0] & that.array[0]; 
    bb.array[1] = this->array[1] & that.array[1]; 
    return bb; 
} 

這是未經測試,但應該給你的基本理念。爲了測試它,我必須編碼相當多,包括構造函數,析構函數,賦值等等,當它真的應該是你的任務:-)

回答二,那也是簡單。唯一的技巧位是兩個邊緣字節,所有的內部字節都可以設置爲全部1位。

爲了設置邊緣字節,您可以使用一個除法位並用一個字節中的位數模數,然後使用位掩碼來設置它們。位掩碼將是0x80,0xc0,0xe0,0xf0,0xf8等,其中每個後續值增加另一個1位。

然後,您將使用其各種形式的bitmask[bitpos % 8]來設置邊緣字節,其數組索引將是bitpos/8

+0

你能舉個小例子嗎? –

+0

@YashSingla,我已經給出了一段代碼示例,以幫助您解決問題,但我並不覺得需要提供完整的工作解決方案。那麼,不是沒有爲它付費當然:-) – paxdiablo

+0

不僅沒有經過測試,但錯誤。你由於某種原因分配內存,然後你應該說'return * bb;',儘管這會造成內存泄漏。 – john