C의 short int는 16 비트를 포함하고 첫 번째 비트는 값이 음수인지 아니면 양수인지를 나타냅니다. 내가 변수의 첫번째 비트가 1이 그래서 프로그램의 출력 UV 동일 기대 알고 부정C 짧은 Int를 부호없는 short로 변환
int main() {
short int v;
unsigned short int uv;
v = -20000;
uv = v;
printf("\nuv = %hu\n", uv);
return 0;
}
을 V 값 이후 : I는 다음과 같다 C 프로그램을 = 52,768b/c 20,000 + (2^15) = 52,768.
대신 출력으로 uv = 45536이 표시됩니다. 논리가 잘못된 부분은 무엇입니까?
숫자는 2의 보수로 저장됩니다 (https://en.wikipedia.org/wiki/Two%27s_complement). 따라서 가장 큰 부호없는 숫자 (0xFFFF)는 실제로 -1 – twain249
입니다. 마지막 비트를 설정하기 만하면 음수가 표시되지 않습니다. 그것들은 2 진 보수 즉, 모든 비트가 부정 +1 된 것으로 표현됩니다. http://stackoverflow.com/questions/1049722/what-is-2s-complement – Marian
@Marian을 참조하십시오.이 게시물은 매우 유용했습니다. 감사! – RyeGuy