561

この関数は、またはのprintf引数型を取ります。ただし、値については何も表示されません。%d%isigned intlong

4

7 に答える 7

724

l(小文字のL)を指定子の直前に 置きます。

unsigned long n;
long m;

printf("%lu %ld", n, m);
于 2008-09-01T22:50:23.023 に答える
200

私はあなたが意味すると思います:

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

また

long n;
printf("%ld", n);   // signed long
于 2008-09-01T23:26:02.797 に答える
90

ほとんどのプラットフォームで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

ところで、「長い」というのは、もはやそれほど意味がありません(主流のx64では)。「int」はプラットフォームのデフォルトのintサイズで、通常は32ビットです。「長い」は通常同じサイズです。ただし、古いプラットフォーム(および最新の組み込みプラットフォーム!)では、移植性のセマンティクスが異なります。「longlong」は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:Integerを参照してください

于 2013-01-30T18:15:04.193 に答える
17

unsigned longを参照している場合は、フォーマット文字がです"%lu"。長い署名を参照している場合、フォーマット文字は"%ld"です。

于 2013-03-06T02:20:44.893 に答える
14

%ldcplusplus.comのリファレンスを参照してくださいprintf

于 2008-09-01T22:47:59.987 に答える
13

私と同じように印刷unsigned long longしたい場合は、次を使用します。

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

他のすべての組み合わせについては、 printf manualの表を使用し、行を取得してから、印刷しようとしているタイプの列ラベルを使用すると思います(printf("%llu", n)上記のように)。

于 2012-10-28T19:24:46.693 に答える
-2

この質問に明確に答えるには、使用しているコンパイラの名前とバージョン、およびコンパイル対象のプラットフォーム (CPU の種類、OS など) を知る必要があると思います。

于 2008-09-02T19:20:35.123 に答える