development

긴 형식을 지정하는 printf의 주장은 무엇입니까?

big-blog 2020. 2. 16. 20:42
반응형

긴 형식을 지정하는 printf의 주장은 무엇입니까?


printf함수와 같은 인수 형 소요 %d또는 %iA에 대한 signed int. 그러나 long가치 가있는 것은 없습니다 .


l지정자 바로 앞에 (소문자 L)를 넣으십시오 .

unsigned long n;
long m;

printf("%lu %ld", n, m);

나는 당신이 의미하는 것 같아요 :

unsigned long n;
printf("%lu", n);   // unsigned long

또는

long n;
printf("%ld", n);   // signed long

대부분의 플랫폼에서 longint동일한 크기 (32 비트)이다. 여전히 자체 형식 지정자가 있습니다.

long n;
unsigned long un;
printf("%ld", n); // signed
printf("%lu", un); // unsigned

64 비트의 경우 long long:

long long n;
unsigned long long un;
printf("%lld", n); // signed
printf("%llu", un); // unsigned

물론 Windows에서는 다릅니다.

printf("%l64d", n); // signed
printf("%l64u", un); // unsigned

64 비트 값을 인쇄 할 때 16 진수로 인쇄하는 것이 도움이되는 경우가 많습니다 (일반적으로 숫자가 큰 경우 포인터 또는 비트 필드 임).

unsigned long long n;
printf("0x%016llX", n); // "0x" followed by "0-padded", "16 char wide", "long long", "HEX with 0-9A-F"

인쇄합니다 :

0x00000000DEADBEEF

Btw, "long"은 더 이상 (주류 x64에서) 그렇게 많은 것을 의미하지 않습니다. "int"는 플랫폼 기본 int 크기이며 일반적으로 32 비트입니다. "긴"은 보통 같은 크기입니다. 그러나 이전 플랫폼 (및 최신 임베디드 플랫폼)에서 다른 이식성 의미가 있습니다. "long long"은 64 비트 숫자이며 사람들이 x- 플랫폼 휴대용 코드를 편집하는 것이 무엇인지 실제로 알지 않는 한 사람들이 일반적으로 사용하는 것입니다. 그럼에도 불구하고 아마도 유형의 의미 적 의미를 캡처하기 위해 매크로를 사용했을 것입니다 (예 : uint64_t).

char c;       // 8 bits
short s;      // 16 bits
int i;        // 32 bits (on modern platforms)
long l;       // 32 bits
long long ll; // 64 bits 

당시에는 "int"가 16 비트였습니다. 이제 64 비트가 될 것이라고 생각하지만, 이식성이 문제가 될 수 있습니다. 물론, 이것조차도 신비 롭고 역사가 풍부한 진실을 단순화 한 것입니다. wiki : 정수 참조


부호없는 long을 참조하는 경우 서식 문자는 "%lu"입니다. 부호있는 long을 참조하는 경우 서식 문자는 "%ld"입니다.


%ldcplusplus.com에서 참조 하십시오printf


unsigned long long예전처럼 인쇄하려는 경우 다음을 사용하십시오.

unsigned long long n;
printf("%llu", n);

다른 모든 조합의 경우 printf manual 의 테이블을 사용하여 인쇄하려는 유형에 대해 행을 가져온 다음 열 레이블을 사용한다고 생각합니다 ( printf("%llu", n)위와 같이).


이 질문에 확실히 대답하려면 사용중인 컴파일러 이름과 버전 및 컴파일하는 플랫폼 (CPU 유형, OS 등)을 알아야합니다.

참고 URL : https://stackoverflow.com/questions/38561/what-is-the-argument-for-printf-that-formats-a-long



반응형