왜 출력이 0입니까? 나는 그것에 약간의 컴파일러 작업을 의심하지만 왜?부호가있는 짧은 값에 올바른 값을 할당 할 수 없습니다.
signed int sint_ = numeric_limits<signed int>::min() << '\n';
cout << "signed int: " << sint_ << '\n';
왜 출력이 0입니까? 나는 그것에 약간의 컴파일러 작업을 의심하지만 왜?부호가있는 짧은 값에 올바른 값을 할당 할 수 없습니다.
signed int sint_ = numeric_limits<signed int>::min() << '\n';
cout << "signed int: " << sint_ << '\n';
이것은 첫 번째 줄에 실수로 << '\n'
이 있기 때문입니다. 그 효과는 최소값의 비트를 13 위치 (13은 문자 코드 \n
임)만큼 왼쪽으로 시프트하는 것입니다. 가장 음의 값의 비트 패턴 1000...0
때문에, 결과는 0
signed int sint_ = numeric_limits<signed int>::min() << '\n';
는 끝이 \n
무엇으로?
signed int sint_ = numeric_limits<signed int>::min();
:
이 당신이 원하는 아닌가요?
좋은 사람 ! 어떻게 보지 못했습니까?) –
@Alexander : 어떻게'\ n'이 문제가되지 않습니까? 그 문제의 일부. '<< \ n'을'<< 0'으로 대체하면 시프트 연산자가 여전히 있더라도 코드가 예상대로 작동하기 때문에 문제는 '시프트 연산자'가 아니라고 말할 수 있습니다. – Nawaz
좋은 사람! 어떻게 보이지 않을 수 있겠습니까?) –
@ 우리가 할 수있는 일은 없습니다 : 복사/붙여 넣기는 눈이 멀게합니다. (원래이 모든 것을 한 줄로 생각했다고 가정합니다.) - 나는 비슷한 일을 분명히했습니다 ;-) –