문제

그만큼 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".

인쇄를 하려는 경우 unsigned long long 내가 그랬던 것처럼 다음을 사용하십시오.

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

다른 모든 조합의 경우 다음 표를 사용한다고 생각합니다. printf 매뉴얼, 행을 가져온 다음 인쇄하려는 유형에 대한 열 레이블을 가져옵니다(제가 하는 것처럼 printf("%llu", n) 위에).

이 질문에 확실하게 대답하려면 사용 중인 컴파일러 이름과 버전, 그리고 컴파일 대상 플랫폼(CPU 유형, OS 등)을 알아야 한다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top