電子書籍の厳選無料作品が豊富!

0x0000ffffLの"L"ってどういう意味ですか?

A 回答 (4件)

「0x0000ffffはlongだよ」と言う意味。



intが16ビットの世界だと
longの変数 = 0x0000ffff << 8;
は「想定外」の結果になる。

なぜなら
0x0000ffff << 8
の部分がintで計算され、0xffffを8ビット左にシフトし、上位8ビットが溢れて消え、計算結果はintの幅で0xfff0になる。

で、それを32ビットの「longの変数」に入れるのだから、longの変数は「0x0000fff0」になってしまう。

なので
longの変数 = 0x0000ffffL << 8;
と書いて「0x0000ffffはlongだ」と言っておけば、最初からlongで計算してくれる。そして、計算結果も正しく「0x000ffff0」になって、その結果がlongの変数に代入される。

そういう訳で「L」があるかないかは、けっこう重要だったりします。

なお、intもlongも、どっちも32ビットな世界では、余り意味がありません。
    • good
    • 0
この回答へのお礼

さっそくのご回答ありがとうございました.
大変詳しい説明でとてもよく理解できました.

お礼日時:2008/12/19 12:25

longであることの明示的表現


sizeof (int) < sizeof (long) な環境で必要です

参考URL:http://www.wdic.org/w/TECH/%E3%82%B5%E3%83%95%E3 …
    • good
    • 0
この回答へのお礼

さっそくのご回答ありがとうございました.
確かに,sizeof (int) < sizeof (long) な環境でのプログラムでした.

お礼日時:2008/12/19 12:24

http://www.open-std.org/JTC1/SC22/WG14/www/docs/ …
の6.4.4.1によると
====================
The type of an integer constant is the first of the corresponding list in which its value can be represented.

整数定数の型は,その型で表現できるとされたリストの中の最初のものが選択される
=====================
ここで表を見ると
何もつけないときはintやunsigned intとして解釈される事がある一方,
Lをつけた時はそのように解釈される事がないことがわかります。
    • good
    • 0
この回答へのお礼

さっそくのご回答ありがとうございました.
ご紹介いただいた資料,今後も参考にさせていただきます.

お礼日時:2008/12/19 12:23

「long型」です。

    • good
    • 0
この回答へのお礼

さっそくのご回答ありがとうございました.
なるほど,よく考えれば自分でも分かりそうなことでしたね笑

お礼日時:2008/12/19 12:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!