爲什麼驗證碼:爲什麼在一個int結果呢〜X - (X + 1)
#include <iostream>
int main()
{
int x = 1;
int y = ~x;
std::cout << y;
}
總是打印 - (X + 1)?如果x = 00000001,那麼y = 11111110?
爲什麼驗證碼:爲什麼在一個int結果呢〜X - (X + 1)
#include <iostream>
int main()
{
int x = 1;
int y = ~x;
std::cout << y;
}
總是打印 - (X + 1)?如果x = 00000001,那麼y = 11111110?
這是因爲你在一個two's complement系統。 C++不保證這一點,但所有(引用需要?)現代架構都有這個屬性。
看起來它至今仍在使用至少特別:http://stackoverflow.com/a/1962756/4342498 – NathanOliver
@krzaq確定其常見問題,我們正在努力保持它那樣:) –
「如果x = 00000001,那麼y = 11111110?」是。但是'11111110'作爲有符號整數是-2。 [Two's Complement](https://en.wikipedia.org/wiki/Two%27s_complement) – tkausl
'int'有一個符號。你可能想用'unsigned int'來嘗試相同的操作。# – user463035818
@ black-goat:但是'y' **在你的實驗中是**'1 ... 11111110'。是什麼讓你覺得這不是第一位? ' - (x + 1)'是'-2',在2的補碼系統上是'1 ... 11111110'。即一切都按照您預期的那樣工作。 – AnT