簡體   English   中英

代碼說明

[英]Code explanation

我不知道這是否是要發布的正確的SE網站,但是我會從此答案中嘗試任何一種方式。建議您這樣做

if (data[c] >= 128)
     sum += data[c];

可以變成這樣:

int t = (data[c] - 128) >> 31;
sum += ~t & data[c];

有人可以向我解釋這將如何工作嗎?

正在發生的事情背后的想法是。 假設data [c]>128。如果為true,則執行data [c]-128會得出一個正數(即符號位為0)。 向右移31次將產生二進制全為0的數字。 所以t = 00000000000000000000000000000000000000

現在,當我們執行〜t運算時,它全為1,並且與data [c]一起再次給我們data [c]。 現在,我們將其添加到總和中,其工作原理與以前一樣。

但是,如果data [c] <128,該怎么辦? 嗯,這意味着data [c]-128為負,給出1作為符號位。 這意味着t = 11111111111111111111111111111111。 因此〜t全為0。 用data [c]將所有0與&-再次給出全0(即十進制為0)。 將總和加0不會改變它,所以一切都很好。

暫無
暫無

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

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