C言語の質問です。

環境はソラリス、SUN_STUDIO 10を使ってコンパイルしています。
LONG LONG の値を画面に出す方法を教えてください。

以下はプログラムと実行結果です。

□プログラム
#include "stdio.h"
main () {
long long xx = 1234123412341234;
printf("value=[%ll][%llu][%lld]\n",xx,xx,xx) ;
}

□実行結果
>cc -64 sample.c -o sample
>sample
value=[][287341][-1080425998]

※マニュアルでは%llでるはずなのですが・・・

回答の条件
  • 1人2回まで
  • 登録:2006/05/19 17:16:15
  • 終了:2006/05/20 19:23:40

回答(4件)

id:znz No.1

znz回答回数193ベストアンサー獲得回数252006/05/19 18:00:01

ポイント20pt

longの場合のlと同じようにlong longの場合のllは長さ修飾子なので、変換指定子のuやdなども必要だと思います。

http://ja.wikipedia.org/wiki/Printf#.E9.95.B7.E3.81.95.E4.BF.AE....

%lluで出力が1234123412341234になっていないのは、整数定数にサフィックスがないからかもしれません。

「1234123412341234LL」のように「LL」というサフィックスをつけるとどうでしょうか?

http://seclan.dll.jp/c99d/c99d05.htm#dt19990531

id:goldman

long long zz = 1234123412341234LL;

printf("value=[%llu]\n",zz) ;

value=[287341]

でダメでした。

2006/05/19 18:29:50
id:maxpower No.2

MAXPOWER回答回数521ベストアンサー獲得回数242006/05/19 18:17:00

ポイント10pt

整数型の定数の記述が必要なのでは?

http://seclan.dll.jp/c99d/c99d05.htm

id:goldman

ダメでした。

2006/05/19 18:30:47
id:znz No.3

znz回答回数193ベストアンサー獲得回数252006/05/19 19:44:25

ポイント60pt

big endianの環境でlong longではなくlongとして値が表示されているように見えるのですが、再現できないので、原因はよくわかりませんでした。

他には、コンパイルオプションをいろいろ変えてみるとどうでしょうか。

x86版Solaris 10やx86のLinuxでは、以下のように「%lld」でうまくいっています。

わざと「%ld」で表示すると質問にある実行結果の値が表示されるので、longとして扱われているのではないかと推測しました。

% cat sample.c
#include <stdio.h>
int main () {
        long long zz = 1234123412341234LL;
        printf("value=[%lld]\n", zz);
        printf("value=[%ld][%ld]\n", zz);
}
% cc sample.c -o sample && ./sample
value=[1234123412341234]
value=[-1080425998][287341]
%
id:goldman

いま会社ではないので、確認できませんが・・・そうかもしれません。

そういえばAIXでもlong long を有効にするオプションがあったような気がします。

次週確認してみます。

2006/05/19 20:45:12
id:Robe No.4

ロベール回答回数11ベストアンサー獲得回数02006/05/19 21:25:17

%I64u でどうでしょう?

id:goldman

あなたは、バカですか?

それでなければ、シロウトは回答しないでください。

2006/05/20 19:20:11

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません