programing

긴 형식의 printf 변환 지정자는 무엇입니까?

showcode 2023. 4. 15. 09:43
반응형

긴 형식의 printf 변환 지정자는 무엇입니까?

printf함수는 다음과 같은 인수 유형을 사용합니다.%d또는%i잠깐 동안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

대부분의 플랫폼에서는long그리고.int같은 크기(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

덧붙여서, "긴"은 더 이상 큰 의미가 없습니다(메인스트림 x64)."int"는 플랫폼의 디폴트 int 사이즈로 보통 32비트입니다."long"은 보통 같은 크기입니다.다만, 낡은 플랫폼(및 현대의 임베디드 플랫폼!)에서는, 휴대성의 의미가 다릅니다."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 참조:정수

부호가 없는 길이를 참조하는 경우 포맷 문자는 다음과 같습니다."%lu"signed long을 가리키는 경우 포맷 문자는 다음과 같습니다."%ld".

%ldcplusplus.com에서 참조

인쇄가 필요했습니다.unsigned long long그래서 이 작업을 찾았습니다.

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

다른 모든 조합은 printf 매뉴얼에 있는 표를 사용하여 행을 선택한 다음 인쇄하려는 유형에 따라 열 라벨을 사용합니다(저와 마찬가지로).printf("%llu", n)위)를 참조해 주세요.

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

언급URL : https://stackoverflow.com/questions/38561/what-is-the-conversion-specifier-for-printf-that-formats-a-long

반응형