2015-02-24 39 views
-5

C++中的語句「(311 & 255)」是什麼意思?當第二個數字是2的冪而不是任何數字時,它與加速內存訪問有什麼關係?在C++中,(311和255)是什麼意思?

+1

單個'&'是一個按位和。例如,311是二進制的「100110111」,而255是二進制的「11111111」。 '311&255'評估爲'110111',或55. – wolfPack88 2015-02-24 19:18:01

+4

這與加速內存訪問無關。 – interjay 2015-02-24 19:18:02

+0

啊,我明白了。當我說它加速內存訪問時,我想我犯了一個錯誤。我的意思是它通過保存除法操作來加速紋理耕作訪問。 – user3023723 2015-02-24 23:59:47

回答

2

在「&」運算符是二進制,按位操作者,並且可以使用在表達式中使用像(311 & 255)當完成「位掩碼」。

311中的二進制數是100110111.當您使用255(二進制數爲11111111)執行AND操作時,結果是將位7左側的任何位設置爲零。在這種情況下,結果是00110111 - 最高有效位被設置爲0.當一組位被用於「屏蔽」另一組時,這就是所指的。

100110111 
& 011111111 
----------- 
    000110111 

這種操作,因爲高速緩存和存儲器總線通常被對齊到冪的兩種尺寸通常計算存儲器地址時使用的,這意味着當您訪問是二的冪的地址,則適合更多的內存塊進入緩存,並且需要更少的內存總線來獲取它。爲了真正成爲一個優勢,軟件設計師(即你)必須計劃內存分配,並且意識到這一點。

如果你想要在這個級別上對內存負責,那麼確切地知道你的硬件的功能是一個非常好的主意。

+0

感謝您的澄清。我想我現在更瞭解它。 – user3023723 2015-02-25 01:15:29