K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[71] 式の中のchar型
投稿者:tos
2007/02/20 02:13:25

皆さん、こんにちは。 表題の件ですが、どこかで「式の中ではchar型の変数は、int型に格上げされる」 というような説明を読んだような気がして、またそこで下記のような例で、 char hoge; char piyo; int foo; hoge = 100; piyo = 100; foo = hoge * piyo; オーバーフローせず、fooに10000が代入される。というような説明を 読んだ記憶があるのですが、いまやってみるとしっかりオーバーフローしてくれます。 「kmaebashi.com内」を検索して、「intより小さい整数型は、可変長引数で渡される ときには無条件でintに格上げされています。」との前橋さんの発言は見つかったのですが、上記のような説明はやはりありませんでした。 やっぱり記憶違いでしょうか? #でも、どっかで読んだような気がするのですが・・・。 #C FAQでもないみたいなんですよね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[72] Re:式の中のchar型
投稿者:(ぱ)
2007/02/20 02:13:25

>表題の件ですが、どこかで「式の中ではchar型の変数は、int型に格上げされる」 規格の6.2.1.5を見る限り、両辺の型が浮動小数点数でもlongでも unsignedでもなければ、両オペランドがintに拡張されることになっています。 >オーバーフローせず、fooに10000が代入される。というような説明を >読んだ記憶があるのですが、いまやってみるとしっかりオーバーフローしてくれます。 というわけで私のところでも試してみましたが、 bcc32とgccの両方で、しっかり10000が代入されました(gccはLinux上、 gccに-Wallを付けた以外はどちらもオプションなし)。 すみませんが、tosさんが実験された処理系とコンパイルオプション、 および再現できる完全なソースコードを教えていただけませんか? ちなみに私はこんなソースで試しました。 #include <stdio.h> int main(void) { char hoge; char piyo; int foo; hoge = 100; piyo = 100; foo = hoge * piyo; printf("foo..%d\n", foo); return 0; }
[この投稿を含むスレッドを表示] [この投稿を削除]
[73] Re:式の中のchar型
投稿者:774RR
2007/02/20 02:13:25

LSI-C 86 試食版とか。 これは最近では数少ない non-ISO compliant な悪名高き処理系です。 もともと i8080 系のためのコンパイラとして開発されたため char と char の演算は char のまま行ってくれます。 っていうか README にその旨書いてあるので、理解し評価し納得した上で 使わないといけないのですが...
[この投稿を含むスレッドを表示] [この投稿を削除]
[74] Re:式の中のchar型
投稿者:tos
2007/02/20 02:13:25

>規格の6.2.1.5を見る限り、両辺の型が浮動小数点数でもlongでも >unsignedでもなければ、両オペランドがintに拡張されることになっています。 すいません。 テストする時、下記のようにpiyoに200を代入してました。 hoge = 100; piyo = 200; で、投稿する時に(手が勝手に?)piyoに100を代入して送ってしまいました。 お騒がせしてすいませんでした。 前橋さん、774RRさんありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]