Почему этот код:Почему ~ х на результат в ИНТ - (х + 1)
#include <iostream>
int main()
{
int x = 1;
int y = ~x;
std::cout << y;
}
Всегда печать - (х + 1)? Если x = 00000001, shoudn't y = 11111110?
Почему этот код:Почему ~ х на результат в ИНТ - (х + 1)
#include <iostream>
int main()
{
int x = 1;
int y = ~x;
std::cout << y;
}
Всегда печать - (х + 1)? Если x = 00000001, shoudn't y = 11111110?
Это потому, что вы находитесь на системе two's complement. C++ не гарантирует этого, но все (требуемые?) Современные архитектуры обладают этим свойством.
Похоже, что он по-прежнему используется сегодня, по крайней мере, специально: http://stackoverflow.com/a/1962756/4342498 – NathanOliver
@krzaq Уверен, что это часто задаваемые вопросы, и мы пытаемся сохранить это так: –
«Если x = 00000001, shoudn't y = 11111110?» да. Но '11111110', как целое число со знаком, равно -2. [Дополнение к двум] (https://en.wikipedia.org/wiki/Two%27s_complement) – tkausl
'int' имеет знак. Возможно, вы захотите попробовать то же самое с 'unsigned int' – user463035818
@ black-goat: Но' y' ** является ** '1 ... 11111110' в вашем эксперименте. Что заставило вас думать, что это было не в первую очередь? '- (x + 1)' is '-2', что является« 1 ... 11111110 »в системе с дополнениями. То есть все работает точно так, как вы ожидали. – AnT