2016-10-03 175 views
0

這裏是代碼行我很困惑於:這個按位操作的目的是什麼? (mWidth + 0x0000000F)&〜0x0000000F;

mMaskRowBytes = (mWidth + 0x0000000F) & ~0x0000000F; 

〜是NOT運營商嗎?

比方說mWidth是960,或11.11億

所以我們來到這裏是

00000000000000000000001111001111 
& 
11111111111111111111111111110000 

這隻會導致

00000000000000000000001111000000 

,對嗎?

將十進制數轉換爲二進制數的目的是什麼?

回答

1

操作符〜取補:

因此,例如:0110會成爲1001

目的是什麼我不知道 - 你需要來說明如何使用mMaskRowBytes。 但它看起來好像是用於處理16位(2字節)塊的東西,因此需要確保數據與最接近的2字節地址空間對齊。通常編譯器會這樣做以確保最有效的堆棧對齊。在32位系統上,這將是4字節和64位4/8字節。這意味着編譯器可以有信心通過有效的步驟上下移動堆棧。對於現代操作系統,這一切都由編譯器和操作系統來關注。如果你在系統級別失敗,那麼你可能必須爲自己完成這一切。

+0

我在這裏使用圖像,所以它看起來像內存需要對齊,因爲OS X?不是100% –

+0

啊,這可能與填充有關。你正在讀/寫/格式化圖像數據。有些格式需要按行逐行填充某些倍數的東西?如果是這樣的話,不要太在意細節。應該有一些圖書館,以節省您的麻煩。 – cdcdcd

2

'〜'是按位互補運算符

對於正數mWidth,它所做的全部向上舍入到下一個16的倍數。(因爲960已經除16,所以保持不變)。

有更清楚的方式做到這一點,雖然具體可以根據您的特定語言。