안녕하세요.
우선! 비전공자입니다. 객체지향이 처음입니다만 질문내용은 그것과 상관이 없네요 ㅎㅎㅎ
3장에서 명시적 변환 할때도 질문을 드려볼까 하다가 넘어갔는데 두번째 나오니까 안되겠습니다;;;
int n = 40000;
short n = (short)n;
//제가 생각했던 결과 n = 32767
//실제 결과 n = -25536
4장 checked, unchecked 를 보니 이게 다시 비트연산과 관련이 있어 보입니다.
short c = 32767
32767 = 2진수 : 01111111 11111111
여기에 1을 더한 결과 : 01111111 11111111 + 1 = 10000000 00000000 (?????????????????????)
흐름을 보면 MaxValue를 넘어서는 명시적형변환은 형식의 가장 MinValue로 변환되어 +수를 더한다??? 라는 결론이 되더군요
다시 3장의 예를 보면
int n = 40000;
short n = (short)n; //short.MinValue : -32768
// -32768 + (-32768 + 40000) = -25536
// 헌데 이건 다시 비트연산과 관계없어 보입니다.
다시 4장에서 예에서 보면 C#은 음수를 2의 보수로 표현하기 때문에 값이 -32768이 된다.
"01111111 11111111 + 1 = 10000000 00000000"
이 부분 살짝 설명 부탁드립니다.
[최초 등록일: ]
[최종 수정일: 11/4/2018]