서명되지 않은 int에 음수 값을 할당하면 어떻게 됩니까?
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
'programing' 카테고리의 다른 글
"$(.ready(handler)"가 권장되지 않는 이유는 무엇입니까? (0) | 2023.10.02 |
---|---|
ActiveRecord는 쿼리 끝에 'AND(1=0)'를 추가합니다. (0) | 2023.09.27 |
새 Spring 세션을 추가할 때 cookie-value 오류 발생 (0) | 2023.09.27 |
XML에서 Elements(요소) 또는 Attribute를 사용해야 합니까? (0) | 2023.09.27 |
Python 문자열에서 알파벳이 아닌 문자를 모두 제거합니다. (0) | 2023.09.27 |