unsigned intが厳密に正であると主張したいと思います。私は、次の2つのオプションの間で議論された:uintが厳密に正であるか
unsigned int i = 1;
assert(i > 0); /*option 1*/
assert(i != 0); /*option 2*/
私はBuridan's assジレンマで自分がこだわりました。どちらか一方を好む理由がありますか?
unsigned intが厳密に正であると主張したいと思います。私は、次の2つのオプションの間で議論された:uintが厳密に正であるか
unsigned int i = 1;
assert(i > 0); /*option 1*/
assert(i != 0); /*option 2*/
私はBuridan's assジレンマで自分がこだわりました。どちらか一方を好む理由がありますか?
は、私は2つの理由のために
assert(i > 0); /*option 1*/
を好みます。
まずはキャラクターが1つ少なく、キャラクターにはお金がかかります。
第2に、数値が厳密に正であることを示すことが意図されている場合、これは、私が符号なし整数であることを知らなくても明らかになります。
さて、あなたはそれが符号なしであることを知る必要があるでしょう、あなたは負の値をテストする必要がないことを知っています。 –
数字が厳密に正であることを望むなら、数字が符号なしであるかどうかにかかわらず、オプション1では厳密に肯定的です。オプション2では厳密には肯定的ですが、コードを見るときに確認するために追加の情報が必要です。 –
どちらも、確かに全体的な機能の目標を伝えるものは何でも同じコードのでを生成し、より良い選択である:それは肯定的主張であるよう
unsigned int i = ...;
assert(i > 0); /*option 1*/
assert(i != 0); /*option 2*/
オプション1は、ほとんどの場合にうまく機能:値は何をする必要があります何があってはならないのか対。通常、これは理解しやすいです。また、算術的性質がi
の場合は、これが最善の方法です。
i
が0またはゼロ以外の値のみで使用される場合、特に算術値が不適切な論理ビットの集合である場合、オプション2は限られたケースで良好に動作します。
「符号なし整数」は、「0」にすることができます。 – birryree
私は知っています。だから私は主張する必要があります。 –
それはまだ0になることができます – ColdSteel