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時,就先取負號再反轉位元

雖然還有++和--的方式可以遞增遞減,但這會影響變數的內容,如果不希望變更變數內容可以這麼寫

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 kgsprogrammer 的頭像
    kgsprogrammer

    太陽系後援會

    SnakeEater 發表在 痞客邦 留言(0) 人氣()