2016-10-17 2 views
-1

일 때 형식 변환이 필요합니까? 다음 코드는 -1이 아닌 매우 큰 정수 값을 인쇄합니다.왜 printf 음수 정수 값이

int64_t num = -1 
printf("%lld",num); 

인쇄하려면 -1을 입력해야합니다.

printf("%lld",(int64_t) num); 

왜 그런가? 표준입니까? 또는 정의되지 않은 동작은 시스템 플랫폼에 따라 다를 수 있습니까?

저는 x86 인텔 프로세서와 인텔 icc 컴파일러를 사용합니다.

+0

@DenisSheremet 저는 x86 인텔 프로세서와 인텔 icc 컴파일러를 사용합니다. – syko

+1

[mcve]를 (를) 더 잘 게시하십시오. 'num'은'int64_t'이며, 캐스트는 아무것도하지 않습니다. – juanchopanza

+1

C 또는 C++을 쓰고 있습니까? C++에서는'printf' 대신'std :: cout'을 사용합니다. – MSalters

답변

5

나는 코드가 이 아니며 정확히 정의되어 있지 않습니다.입니다. 출력은 다음 형식 specfier로 PRId64를 사용하는 최초의

#include <cinttypes> 

를 작성해야합니다 (컴파일러 지원이, 2의 보수 64 비트 signed 입력해야하는 경우)를 int64_t 유형 위해

: 당신은 C++의 비교급 고급 스러움이있는 경우

printf("%" PRId64, num); 

, 당신은 요 가정 int64_t에 적절한 과부하가되는 std::cout 상당히 간단하게 사용할 수 있습니다 ur 플랫폼은 해당 유형을 구현합니다.

+1

당신은 정확합니다,하지만 * 연습 *에서 ICC로, 나는 똑같이 행동 할 것이라고 생각합니다. 나는 OP가 우리에게 그가 문제가있는 실제 코드를 보여주고 있다고 생각하지 않는다. –

관련 문제