close
在C/C++中,~運算子的功能是求1的補數,也就是位元倒數
現在來看看32bit的整數是怎麼表現的
反轉0
二進位 十進位
00000000000000000000000000000000 0 反轉前
11111111111111111111111111111111 -1 反轉後
反轉1
二進位 十進位
00000000000000000000000000000001 1 反轉前
11111111111111111111111111111110 -2 反轉後
比較一下可以發現反轉前和反轉後絕對值相差1
利用這個特性
可以在有+1或是-1的情況下用~運算子替代
(i+1) / n ----> -~i/n
(i-1) / n ----> ~-i/n
當希望變數加1時,就先反轉位元再取負號
當希望變數減1時,就先取負號再反轉位元
雖然還有++和--的方式可以遞增遞減,但這會影響變數的內容,如果不希望變更變數內容可以這麼寫
全站熱搜
留言列表