質問

って言うしたか否かを決定するには true き0x01は0xFF.当然、すべての非ゼロの値に変換するをtrueにしていると思うしようと決め、正確な内部表現。

何のメリット、デメリット。

役に立ちましたか?

解決

0はfalseですが、プロセッサがフラグを設定した場合、登録がゼロになります。

他にはないフラグは、設定その他の値(0x01,0xff、等)が行うのではなく、あくまでもゼロフラグがfalseに設定されていない場合はゼロでない値にするものとする。

その答えがここで主張の定義に0としてfalseの場合、何もしています。

したい場合は"定義"、デフォルト値はtrue、そ0x01よりも

  • なので、同じ番号毎のビット長は、signedness
  • 必試験屋への注文数がカットしたい場合はるかどうか確かに、ゼロフラグできない、または費用のかかる利用
  • な符号拡張変換中に他の種類
  • 論理演算表現法と同じで

-アダム

他のヒント

これは、限り、それは外部表現するための規則を満たすよう、重要ではありません。

私は0として絶対に定義されている場合はfalse、ここではCからヒントを取るだろう、と真は偽でないと定義されます。真の絶対値と比較すると、これは、重要な違いです。あなたが唯一の2つの状態がありタイプを持っていない限り、あなたはその値型内の全ての値を考慮する必要があり、何が真実で、何がfalseます。

なぜあなたはゼロ以外の値が真であることを選択していますか?真エイダではTRUEで、偽はFALSEです。 BOOLEANへとからの暗黙の型変換はありません。

使用-1弱い型付けされた言語での一つの利点がある - あなたの場合は台無しにし、あなたの状態がまだある限り、オペランドの一つがに変換されたとして正しく評価され、代わりに論理and演算子のビットごとのand演算子を使用標準的なブール表現。標準的な表現が1である場合、これは真実ではありません。

  0xffffffff & 0x00000010 == 0x00000010 (true)
  0xffffffff && 0x00000010 == 0xffffffff (true)

が、

  0x00000001 & 0x00000010 == 0x00000000 (false)
  0x00000001 && 0x00000010 == 0xffffffff (true)

IMOがこだわりたいと false=0x00を使用してみてください0x01.0xFFは通常:

  • このような操作が溢れ

または

  • エラーマーカー

場合でも false.そのためには*nix戻り値ンから実行可能ファイル、 true=0x00、非ゼロの値はfalseです。

-1 1より入力する長いです...

0が偽であり、何かが真であるため、最終的にはそれは問題ではない、とあなたは真の正確な表現に比較することはありません。

編集、投票ダウンそれらのために、理由を説明してください。この答えは、基本的には現在19の定格のものと同じです。だから、同じ基本的な答えは何のために21票差である。

それがために-1のコメントである場合は、

、それが真実である、実際には「真」を定義した人(例:コンパイラライター)を使用しているつもり-1の代わりに、1、彼らが使用することを選んだと仮定しています正確な表現。 -1 1より入力に時間がかかるために起こっている、と最終的な結果は同じになります。声明は、それが2つ(1または-1)に実質的な違いがないので、愚かであることを意味した、愚かである。

あなたがダウンして何かをマークしようとしている場合は、

少なくともそのための根拠を提供します。

それは8ビットはあなたの最小記憶単位であることを暗黙の前提を有しているので

0xFFの奇数選択です。しかし、それはよりコンパクトよりもブール値を格納したいことも珍しくありません。

おそらくあなたは、ブール演算子が(関係なく、符号拡張の作品)ただ1 0または1ビットで何かを作るかどうかを考えることで言い換えたい、またはすべてのゼロまたはすべてのものである(と署名の符号拡張に依存します任意の長さですべてのものを維持するために、2の補数の量)。

私はあなたの人生は、0と1と単純だと思います。

長所は何もありません、と短所は、あまりにも、何もありません。本当にあなたが選択した数字は関係ありませんので、限り、あなたはブール値の整数から自動変換を提供して、それは、任意になります。

あなたは、この自動変換を許可しなかった場合は、

一方で、あなたはプロを持っていると思います:あなたはあなたの言語でのいくつかの完全に任意のルールを持っていないでしょう。あなたは(7 - 4 - 3) == false、または3 * 4 + 17 == "Hello"、または"Hi mom!" == Complex(7, -2)を持っていないでしょう。

私はCメソッドが進むべき道だと思います。 0は、他の何かが真の意味、偽の意味します。あなたは真のために別のマッピングで行くなら、あなたは不定値が持つことの問題が残っている - 。真でも偽でもない。

これはあなたが特定の表現のための特別なサポートがあり、特定の命令セット用にコンパイルされます言語である場合は、

、その後、私はあなたをご案内しましょうと思います。しかし、その他の情報を欠席、「標準」内部表現のために、私は-1(バイナリ内のすべての1つの)行くだろう。この値は、(単一ビット、8ビット、16、など)を好きなサイズブールによく伸びており、あなたは小さな「TRUE」または「FALSE」に「TRUE」または「FALSE」を破るならば、そのまだ同じ。 (どこが壊れた場合は、FALSE = 0x00をを取得したい16ビットTRUE = 0x0001のとTRUE = 0x01で)ます。

0が偽およびゼロ以外が真であるように、

言語を設計します。何かを「変換」し、代わりにいくつかの特定の値のあなたが適切にコードを書くのを助ける「非ゼロ」を考えてする必要はありません。

あなたが内蔵されている場合は、「真の」などの記号

その後、先に行くと値を選ぶが、常に「非ゼロがtrue」の代わりに「0x01のが真である」。

だと思います

どのようなあなたの値がそれらを変更しない選択すると、あなたが、やります。 FORTH-77には、trueとfalseは、1と0のように定義された後、FORTH-83は、それらを再定義-1と0は少なくないがあった問題(もOK、わずか数、これはFORTHである私たちは話しています)これによって引き起こされます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top