人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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でるはずなのですが・・・

●質問者: goldman
●カテゴリ:コンピュータ インターネット
✍キーワード:CC C言語 コンパイル ソラリス プログラム
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● znz
●20ポイント

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

◎質問者からの返答

long long zz = 1234123412341234LL;

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

value=[287341]

でダメでした。


2 ● MAXPOWER
●10ポイント

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

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

◎質問者からの返答

ダメでした。


3 ● znz
●60ポイント

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]
%
◎質問者からの返答

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

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

次週確認してみます。


4 ● ロベール
●0ポイント

%I64u でどうでしょう?

◎質問者からの返答

あなたは、バカですか?

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ