~叫“按位取反”運算,2優先順序
^按位異或運算子,9優先順序
()運算子優先順序最高
所以先計算括號裡面的~a
計算結果與a異或
整個運算結果 再按位取反
所謂按位取反就是:
比如int型別的a=10;
記憶體中存放的是0x0000000a->相當於0000000000000000000000001010(你自己再數一下,對於32位系統來說 int是32位的最高位是符號位)
按位取反之後就是0xfffffff5->相當於11111111111111111111111111110101;
最高位是符號位此數是整數的補碼(至於補碼怎麼變成我們常用的數的自己查資料吧),表示成int就是-11;
按位異或,異或運算1^1=0,0^0=0,1^0=1,0^1=1(全部為二進位制表示)
具體的就不演算給你看了!
對於~(a^~a)運算結果一直是0
a與~a每一位都相反,異或之後結果每一位都為1(相反兩數異或結果為1,參考這一行上面的第三行)
每一位結果都取反結果每一位都為0
即:
0x00000000補碼錶示
結果是0;
解釋完畢!
~叫“按位取反”運算,2優先順序
^按位異或運算子,9優先順序
()運算子優先順序最高
所以先計算括號裡面的~a
計算結果與a異或
整個運算結果 再按位取反
所謂按位取反就是:
比如int型別的a=10;
記憶體中存放的是0x0000000a->相當於0000000000000000000000001010(你自己再數一下,對於32位系統來說 int是32位的最高位是符號位)
按位取反之後就是0xfffffff5->相當於11111111111111111111111111110101;
最高位是符號位此數是整數的補碼(至於補碼怎麼變成我們常用的數的自己查資料吧),表示成int就是-11;
按位異或,異或運算1^1=0,0^0=0,1^0=1,0^1=1(全部為二進位制表示)
具體的就不演算給你看了!
對於~(a^~a)運算結果一直是0
a與~a每一位都相反,異或之後結果每一位都為1(相反兩數異或結果為1,參考這一行上面的第三行)
每一位結果都取反結果每一位都為0
即:
0x00000000補碼錶示
結果是0;
解釋完畢!