2016-10-06 48 views
2

爲什麼驗證碼:爲什麼在一個int結果呢〜X - (X + 1)

#include <iostream> 
int main() 
{ 
    int x = 1; 
    int y = ~x; 
    std::cout << y; 
} 

總是打印 - (X + 1)?如果x = 00000001,那麼y = 11111110?

+3

「如果x = 00000001,那麼y = 11111110?」是。但是'11111110'作爲有符號整數是-2。 [Two's Complement](https://en.wikipedia.org/wiki/Two%27s_complement) – tkausl

+1

'int'有一個符號。你可能想用'unsigned int'來嘗試相同的操作。# – user463035818

+0

@ black-goat:但是'y' **在你的實驗中是**'1 ... 11111110'。是什麼讓你覺得這不是第一位? ' - (x + 1)'是'-2',在2的補碼系統上是'1 ... 11111110'。即一切都按照您預期的那樣工作。 – AnT

回答

2

這是因爲你在一個two's complement系統。 C++不保證這一點,但所有(引用需要?)現代架構都有這個屬性。

+1

看起來它至今仍在使用至少特別:http://stackoverflow.com/a/1962756/4342498 – NathanOliver

+0

@krzaq確定其常見問題,我們正在努力保持它那樣:) –

相關問題