2016-10-06 3 views
2

Почему этот код:Почему ~ х на результат в ИНТ - (х + 1)

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

Всегда печать - (х + 1)? Если x = 00000001, shoudn't y = 11111110?

+3

«Если x = 00000001, shoudn't y = 11111110?» да. Но '11111110', как целое число со знаком, равно -2. [Дополнение к двум] (https://en.wikipedia.org/wiki/Two%27s_complement) – tkausl

+1

'int' имеет знак. Возможно, вы захотите попробовать то же самое с 'unsigned int' – user463035818

+0

@ black-goat: Но' y' ** является ** '1 ... 11111110' в вашем эксперименте. Что заставило вас думать, что это было не в первую очередь? '- (x + 1)' is '-2', что является« 1 ... 11111110 »в системе с дополнениями. То есть все работает точно так, как вы ожидали. – AnT

ответ

2

Это потому, что вы находитесь на системе two's complement. C++ не гарантирует этого, но все (требуемые?) Современные архитектуры обладают этим свойством.

+1

Похоже, что он по-прежнему используется сегодня, по крайней мере, специально: http://stackoverflow.com/a/1962756/4342498 – NathanOliver

+0

@krzaq Уверен, что это часто задаваемые вопросы, и мы пытаемся сохранить это так: –

Смежные вопросы