long 형식을 지정하는 printf의 인수는 무엇입니까?
-
09-06-2019 - |
문제
그만큼 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비트일 것이라고 생각하겠지만 그렇지 않습니다. 그러면 엄청난 이식성 문제가 발생했을 것입니다.물론, 이것은 신비롭고 역사가 풍부한 진실을 단순화한 것입니다.보다 위키:정수
unsigned long을 참조하는 경우 서식 지정 문자는 다음과 같습니다. "%lu"
.signed long을 참조하는 경우 서식 지정 문자는 다음과 같습니다. "%ld"
.
%ld
보다 printf
cplusplus.com 참조
인쇄를 하려는 경우 unsigned long long
내가 그랬던 것처럼 다음을 사용하십시오.
unsigned long long n;
printf("%llu", n);
다른 모든 조합의 경우 다음 표를 사용한다고 생각합니다. printf 매뉴얼, 행을 가져온 다음 인쇄하려는 유형에 대한 열 레이블을 가져옵니다(제가 하는 것처럼 printf("%llu", n)
위에).
이 질문에 확실하게 대답하려면 사용 중인 컴파일러 이름과 버전, 그리고 컴파일 대상 플랫폼(CPU 유형, OS 등)을 알아야 한다고 생각합니다.