2014-09-12 3 views
0

우리는 왜 결과에서 우리는 -128을암시 적 변환의 결과로 왜 -128이 발생합니까?

#include <iostream> 

int main() 
{ 
    int A = 128; 
    char B = A; 
    A = B; 
    std::cout << "B:= " << B << std::endl; 
    std::cout << "A:= " << A << std::endl; 
    return 0; 
} 

이 사람이 나를 설명 할 수 다음과 같은 C++ 코드를 얻을 수 있나요?

+0

coz char overflow [참조] (http://en.cppreference.com/w/cpp/language/types) 부호있는 char은 -128에서 127까지의 제한을 가질 수 있습니다. – EdChum

+0

'unsigned char'은 어떻게됩니까? – nakiya

+3

'char'이 분명히 당신의 경우에 서명되어 있습니다 (반드시 그렇지는 않습니다). 그러므로 128 -> 0x80 -> -128입니다. –

답변

3

시스템에서 char 유형의 범위는 -128에서 127입니다.

128은 해당 시스템의 char에 맞지 않으므로 구현 정의 된 방식으로 -128 값으로 변환됩니다.

변수를 int 변수로 다시 할당하면 값이 -128이므로 문제가되지 않습니다. 참고로

: 구현 값 128 (char) -128 때문에 128 변환하는 int이 경우는 -128 대한 부호 8 비트 표현 될 일 10000000, 이진 표현된다. 이것은 많은 수의 구현에 적용됩니다.

+0

이미 분명합니다. 고마워. –

+0

그런 다음 해결책으로 표시하십시오. –

관련 문제