簡體   English   中英

和全位?

[英]AND with full bits?

我最近一直在閱讀一些代碼,並遇到了一些問題:

somevar &= 0xFFFFFFFF;

所有位都打開的東西有什么意義; 它到底是不是只等於somevar?

“somevar”可以是64位變量,因此該代碼將提取底部的32位。

編輯:如果它是一個32位變量,我可以想到其他原因,但它們更加模糊:

  • 常量0xFFFFFFFF是自動生成的代碼
  • 有人試圖欺騙編譯器以防止某些事情被優化
  • 有人故意要求無操作線在調試期間在那里設置斷點。

實際上,如果somevarint類型(32位整數),這就沒有意義。 但是,如果它是long (64位整數)類型,那么這將掩蓋值的上半部分(最重要的)。

請注意, long值不保證是64位,但通常一個32位計算機上。

我想這取決於somevar的長度。 當然,如果somevar是64位int,那么這將不是無操作。 或者,somevar是某種帶有重載operator&=

肯定是在64位環境中截斷32位。

如果代碼片段是C ++,那么可能已經重寫了&=運算符,以便產生與按位AND無特別相關的效果。 當然,這將是一件令人討厭,邪惡,骯臟的事情......

有時long的大小是32位,有時它是64位,有時它是別的東西。 也許代碼試圖補償它 - 並且只是使用該值(如果它是32位)或掩蓋其余的值並且僅使用它的低32位。 當然,這不是真的有意義,因為如果需要,那么使用int會更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM