簡體   English   中英

這些按位運算在做什么

[英]What are these bitwise operations doing

uint sum = generateSum();
int forced = getForcedBitfield();
int previousSum = getPreviousSum();

sum = (~forced & sum) + (forced & previousSum);

最后一行到底在做什么? 總和為32個布爾值。 這是一個位域。 強制是位字段,而presumSum是位字段。

用簡單的英語來說,最后一行在做什么? (不是操作,我知道它不是強制的,並且與和相加,然后將其與先前的總和相加)

這將從兩個值( sumpreviousSum )中有選擇地選擇位,其中“ on”位來自previousSum ,“ off”位來自sum

因為加法運算的兩個操作數的互斥位設置為1,所以在這種情況下,加法的作用與布爾或相同。

就像使用模具將兩個圖像組合在一起。

要查看其工作原理,讓我們使用4位值:

強制= 0011(〜強制= 1100)
previousSum = 0110
總和= 1111
〜強制&之和= 1100
強制&以前的總和= 0010

兩個值中沒有位處於“ on”狀態,因此求和與OR相同,其效果等同於從兩個有效值中選擇位以構造新值。

暫無
暫無

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

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