評価値,整数値

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
大熊
記事: 45
登録日時: 2年前

評価値,整数値

#1

投稿記事 by 大熊 » 2年前

下記の問題の答えをお教えください

正しい説明を全て選びなさい.

ただし,文中の「条件式」とは,関係演算子(==, >, !=など)や論理演算子(&&, ||, !)を用いた式のこととする.
1. 条件式が真のとき,その評価値は必ず1である
2. 条件式が真のとき,その評価値は0以外の任意の整数である
3. 条件式が偽のとき,その評価値は必ず0である
4. 条件式が偽のとき,その評価値は1以外の任意の整数である
5. C言語で「真」を表す整数値は,1のみである
6. C言語で「真」を表す整数値は,0以外のすべての整数である
7. C言語で「偽」を表す整数値は,0のみである
8. C言語で「偽」を表す整数値は,1以外のすべての整数である

box
記事: 2002
登録日時: 13年前

Re: 評価値,整数値

#2

投稿記事 by box » 2年前

他の質問に付いている回答に対して、適切にレスしてくださいね。解決したとかしてないとか。ここがまだわからんとか。
答えもらいっぱなしじゃダメですよ。掲示板っていうメディアはそういうところですから。

1.処理系に依存し、必ず1とは言い切れない。
2.正しい。
3.正しい。
4.誤り。
5.1以外の整数でもよい。
6.正しい。
7.正しい。
8.誤り。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

大熊
記事: 45
登録日時: 2年前

Re: 評価値,整数値

#3

投稿記事 by 大熊 » 2年前

お前間違ってるぞ。嘘を教えるなよ。害でしかないぞ

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 評価値,整数値

#4

投稿記事 by みけCAT » 2年前

box さんが書きました:
2年前
2.正しい。
確かに、少なくともこれは間違いですね。
ここでの「条件式」の定義は
大熊 さんが書きました:
2年前
ただし,文中の「条件式」とは,関係演算子(==, >, !=など)や論理演算子(&&, ||, !)を用いた式のこととする.
となっており、すなわち「指定の演算子が使われている」というだけですね。
したがって、例えば

コード:

(1 == 1) + 1.5
も(==演算子が使われているので)「条件式」であり、真とみなせますが、
その評価値は整数ではありません。
box さんが書きました:
2年前
3.正しい。
これは間違っているか微妙ですね。
例えば、0.0

コード:

(1 == 2) + 0.0
や、(void*)0

コード:

1 == 2 ? malloc(1024) : (void*)0
なども偽となります。
これが「0」に含まれるかどうか、という日本語の解釈の問題が発生します。
box さんが書きました:
2年前
1.処理系に依存し、必ず1とは言い切れない。
これも間違いの可能性が高そうです。
1になるかどうかは実際の式に依存し、処理系に依存する式であれば処理系に依存しますが、
全ての場合において処理系に依存するかは怪しそうです。
大熊 さんが書きました:
2年前
お前間違ってるぞ。嘘を教えるなよ。害でしかないぞ
これはどこが間違っていて嘘だという主張ですか?その根拠は何ですか?
もしboxさんによる問題の答えが間違っていて嘘だというのであれば、どうしてそれがわかったのですか?
答えがわかっているのにわからないような感じで質問をした、ということではないですか?
(とはいえ、答えがわかっている質問をするのは別にフォーラムルールで禁止というわけではないようですが…)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 評価値,整数値

#5

投稿記事 by みけCAT » 2年前

ごめんなさい、間違えました。
5~8の説明においては「C言語で」と書かれているのに対し、1~4の説明では「C言語で」的なことは書かれていません。
また、この質問の他の部分にも「C言語」という条件はありません。
したがって、1~4の説明については、C言語以外も考えるのが自然だと考えられます。

実際、例えばJavaScriptでは、条件式 1 == 2 の評価値は false となり、これは0でも整数でもありません。
よって、
box さんが書きました:
2年前
3.正しい。
は、「間違っているか微妙」ではなく、間違いだと確定できます。

実際、このコード

コード:

console.log(1 == 2); // 1 == 2 の評価値
console.log((1 == 2) === 0); // 1 == 2 の評価値は 0 か?
console.log(Number.isInteger(1 == 2)); // 1 == 2 の評価値は整数か?
if (1 == 2) { // 1 == 2 は真か?
	console.log("1 == 2 is true");
} else {
	console.log("1 == 2 is false");
}
実行すると、実行結果は

コード:

false
false
false
1 == 2 is false
となり、偽である条件式の評価値が0でも整数でもない場合があることを確かめることができます。
Number.isInteger() - JavaScript | MDN
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

“C言語何でも質問掲示板” へ戻る