출력은 2의 보수 또는 16 또는 32 비트 int
에 의존하지 않습니다. 보이는 출력은 완전히 정의되어 있으며 드문 1의 보수 또는 부호 크기 머신에서 동일합니다.결과는 16 비트 unsigned short
-12345가 최소 할당 범위 인 short
내에 있으므로 할당에 문제가 없습니다. short
이 ... 인수로 전달되면 short
이 int
의 범위에 있으므로 값이 변경되지 않고 int
으로 일반적인 프로모션이 진행된다고 생각됩니다. "%d"
은 int
기대되므로 출력
short int v = -12345;
printf("%d\n", v); // output "-12345\n"
"-12345"
잘 정의 된 유형의 부호가 음수를 할당한다. 16 비트 unsigned short
으로 uv
의 값은, 값 인 ... 인수로 전달 unsigned short
53191.
의 최종 값 (이 경우에는 65536) USHRT_MAX+1
최소 배수 인 플러스 -12345 int
또는 unsigned
으로 변환되며, unsigned short
의 전체 범위가 포함됩니다. IAC, 값은 변경되지 않습니다. "%u"
은 unsigned
과 일치합니다. 또한 값이 int
또는 unsigned
으로 표현 될 수있는 int
과 일치합니다. 서명되지 않은 짧은에 대한 값을 캐스팅 할 때
short int v = -12345;
unsigned short uv = (unsigned short) v;
printf("%u\n", v); // output "53191\n"
어떤 작업이 결과로 이어질?
캐스팅은 최종 결과에 영향을 미치지 않습니다. 동일한 결과가 캐스트없이 발생했을 것입니다. 캐스트는 조용한 경고에 유용 할 수 있습니다.
나에게 맞는 것 같습니다. 어떤 결과를 기대 했습니까? –
@SteveSummit 사실 나에게 잘못된 것 같습니다 ... http://port70.net/~nsz/c/c11/n1570.html#6.3.1.3p2에 따르면 '53190'이어야합니다. 내가 그것을 정확하게 읽고 있다면 ... –
@EugeneSh. 올바르게 읽지 못한다 ;-) –