programing

서명되지 않은 int에 음수 값을 할당하면 어떻게 됩니까?

javamemo 2023. 9. 27. 16:48
반응형

서명되지 않은 int에 음수 값을 할당하면 어떻게 됩니까?

중복 가능:
C에서 서명되지 않은 변환에 서명했습니다 - 항상 안전한가요?

unsigned int 유형의 변수를 선언합니다.unsigned int x = -1;

이제 -1 in two의 보어(32비트 머신 가정)는 0xFFFFFF입니다.이제 x에 이 값을 할당했을 때 x에 0x7FFFFFF가 할당되었습니까?

그렇다면 f("%d",x)를 인쇄합니다. 0x7FFFFFF에 해당하는 10진수를 인쇄했을 것입니다.그러나 인쇄되는 값이 -1이기 때문에 이러한 현상은 발생하지 않습니다.내가 뭘 놓치고 있는 거지?

편집: %u 형식 지정자를 사용하여 서명되지 않은 값을 인쇄할 수 있음을 알고 있습니다.하지만 그것은 위의 질문에 답하는 데 도움이 되지 않습니다.

"%d"형식은 (서명된) int 값에 대한 형식입니다.서명되지 않은 값으로 사용할 경우 실제 값이 아닌 다른 것을 출력할 수 있습니다."%u"실제 가치를 보기 위해, 또는%x그것을 16진법으로 볼 수 있습니다.

선언문에

unsigned int x = -1;

어투, 어투, 어법-1는 int 유형이며 -1 값을 갖습니다.이니셜라이저는 이 값을 int에서 서명되지 않은 int로 변환합니다.서명된-비서명 변환 규칙에 따르면 값이 감소된 모듈로(modulo)로 표시됩니다.UINT_MAX + 1,그렇게-1로 변환할 것입니다.UINT_MAX(아마도)0xffffffff아니면4294967295한다면unsigned int는 32비트입니다.

부호가 없는 유형의 개체에는 음수 값을 할당할 수 없습니다.이러한 값은 할당되기 전에 서명되지 않은 유형으로 변환되며, 결과는 항상 >= 0이 됩니다.

사용하다%u대신에%d서명되지 않은 값을 인쇄할 수 있습니다.그러면 0xFFFFFFFF가 보일 겁니다.

값을 먼저 부호 없는 int로 변환하여 x에 0xffffff를 할당하는 것입니다.그런 다음 printf("%d\n")를 사용하여 값을 서명된 int로 다시 변환하여 0xffffff의 값을 유지합니다.따라서 -1을 인쇄합니다.

언급URL : https://stackoverflow.com/questions/7152759/what-happens-when-i-assign-a-negative-value-to-an-unsigned-int

반응형