2016-10-06 5 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입니다. [2의 보수] (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 물론 FAQ입니다. 그런 식으로 유지하려고합니다 :) –