부호없는 정수가 있지만 % d를 사용하여 인쇄 할 때 거기에 때때로 음수 값이 있습니까?C 부호없는 int가 음수 값을 제공합니까?
답변
이 작동합니다 :
unsigned int a;
printf("%u\n", a);
설명 : 대부분의 아키텍쳐에는 정수가 two's complement에 표시됩니다 서명했다. 이 시스템에서 (여기서 N = sizeof(int)
)보다 작은 양수는 int
또는 unsigned int
을 사용하는지 여부에 관계없이 동일한 방식으로 나타납니다. 그러나 부호없는 int의 숫자가 2**(N-1)
보다 큰 경우 부호있는 숫자가 2의 보수로 표시됩니다. 즉, 을 전달할 때 printf
이 전달한 값입니다.
인쇄 %d
은 정의 된 유형에 관계없이 정수를 부호있는 십진수로 읽습니다.
부호없는 숫자를 인쇄하려면 %u
을 사용하십시오.
이것은 가변 인수를 처리하는 C의 방법 때문에 발생합니다. 컴파일러는 스택에서 값 (void*
을 입력하고 호출 스택을 가리킴)을 가져오고 printf
은 사용자가 지정한 형식 문자열에서 데이터에 포함 된 내용을 파악해야합니다.
당신은 형식 문자열을 제공해야하는 이유는이 - C는에서 일반 또는 사전 정의 된 toString
를 얻을 수 RTTI의 방법이나 (예를 들어 자바 Object
)는 '기본 클래스'가 없습니다.
Nitpick : C는 값으로 호출하므로 컴파일러는 포인터가 아니라 인수 값을 가져옵니다. 값 (printf ("% u", & myvariable);)에 대한 포인터를 전달하지 않으면 직접 값을 전달합니다 (printf ("% u", myvariable);). – unwind
실제로'printf'에게 스택에 대한 포인터를줍니다. – LiraNuna
@LiraNuna - varargs 함수의 구현이 지정되지 않았기 때문에'#define va_copy (dest, src) dest = src' 또는'#define va_copy (dest, src) memcpy (dest, src, sizeof (va_list))'는'va_copy' 매크로가 제공되지 않는 시스템에서 이식성있는 대체물입니다. 그들 중 하나가 작동 할 수도 있지만 누가 알 수 있습니까? –
% d는 printf가 그 값을 int (부호가있는 것)로 해석한다는 것을 의미합니다. unsigned int이면 % u를 사용하십시오.
- 1. int가 8 자리의 가비지 값을 왜 여기에 제공합니까?
- 2. 부호없는 int가 CLS를 준수하지 않는 이유는 무엇입니까?
- 3. int가 부호없는 또는 서명 된 것과 같습니다.
- 4. 음수 값을 출력하는 C++ 코드
- 5. 은 mysql에서 음수 값을 0으로 변환합니다.
- 6. C# 부호없는 int 기본값
- 7. preg_match 음수 및 음수
- 8. 음수 값을 피하는 방법은 무엇입니까?
- 9. 셀에서 음수 값을 읽는 중
- 10. 배열의 음수 인덱스 값을 금지해야합니다.
- 11. 부호없는 부정 프리미티브?
- 12. C++의 부호없는 키워드
- 13. C++에서 부호없는 double은?
- 14. C#의 음수 값 DateTime
- 15. 내 C++ clock() 기반 함수가 음수 값을 반환하는 이유는 무엇입니까?
- 16. 임의의 음수/음수 생성
- 17. 부호없는 int로 로그인했습니다.
- 18. C++에서 부호없는 시프트 템플리트
- 19. NSNumber의 부호없는 long 값을 가져올 수 없습니다.
- 20. iPhone - 왜 AVAudioPlayer currentTime이 음수 값을 반환합니까?
- 21. JQuery offset() CSS3 열에서 음수 값을 반환합니까?
- 22. 파일을 비교할 때 Strcmp에서 음수 값을 출력합니다.
- 23. Box2d : GetLinearVelocity()에서 음수 값을 반환합니다.
- 24. 음수 값을 사용하여 이미지를 회전하는 방법
- 25. 부호가있는 부호없는 및 부호없는 정수가
- 26. 부호없는 int가 주어지면, set bit의 "index"를 얻는 가장 빠른 방법은 무엇입니까?
- 27. ostream의 음수 정밀도
- 28. mysql5에서 coldfusion의 세션 값을 트리거에 어떻게 제공합니까?
- 29. int가 C로 항상 32 비트입니까?
- 30. jshort를 부호없는 short로 변환하십시오.
컴파일러에서 이러한 종류의 오류에 대해 경고하는 옵션이 있는지 확인하십시오. 그것은 - gcc로 포맷합니다. –
[부호없는 정수의 최대 값을 인쇄하는 방법은 무엇입니까?] (http://stackoverflow.com/questions/12812812/how-can-i-print-maximum-value-of-an-unsigned-integer) –