int a=1;
// a=1 in binary representation 0000 0000 0000 0000 0000 0000 0000 0001
int b =~a; 1111 1111 1111 1111 1111 1111 1111 1110
printf("%d",b)
輸出= -2。補碼32位數據
爲什麼輸出是-2
32位 - 0-31。
第31位有符號位。如果不是+ ve,則有符號位= 0;如果不是-ve,則有1。
由於1移動到了第31位。如果有符號位是1,則不是-ve。那麼爲什麼價值2
我的理解是正確的。如果不引導我
它是實現定義如何表示有符號整數。您不能從標準中得出什麼按位操作對簽名整數做什麼。 –
閱讀[二補](http://en.wikipedia.org/wiki/Two%27s_complement)。這是處理簽名數字的最常見方式。 –
混合**簽名**整數與按位操作('〜')通常是一個壞主意。 – pmg