답변:
l
지정자 바로 앞에 (소문자 L)를 넣으십시오 .
unsigned long n;
long m;
printf("%lu %ld", n, m);
printf("%ld", ULONG_MAX)
값을 -1로 출력합니다. 이어야한다 printf("%lu", ULONG_MAX)
아래 @Blorgbeard에 의해 설명 된 바와 같이 긴 부호를 위해.
%ld
OP 질문과 더 조화를 이루도록로 변경해야합니다 .
%l
트리거warning: unknown conversion type character 0x20 in format [-Wformat]
나는 당신이 의미하는 것 같아요 :
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
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
32의 크기를 가지고 있습니다 "가 여전히 사실 인지 잘 모르겠습니다 . 예, 나는 오라클 리눅스 x86_64의 / AMD64에있어,와 함께 8 바이트입니다. nvcc
long
%ld
cplusplus.com에서 참조 하십시오printf
unsigned long long
예전처럼 인쇄하려는 경우 다음을 사용하십시오.
unsigned long long n;
printf("%llu", n);
다른 모든 조합의 경우 printf manual 의 테이블을 사용하여 인쇄하려는 유형에 대해 행을 사용한 다음 열 레이블을 사용한다고 생각합니다 ( printf("%llu", n)
위와 같이).
이 질문에 확실히 대답하려면 사용중인 컴파일러 이름과 버전과 컴파일하는 플랫폼 (CPU 유형, OS 등)을 알아야합니다.