S
が{0₁, ¯1₂, 0₂, 1₂, ¯2₃, ¯1₃, 0₃, 1₃, 2₃, ¯3₄, ¯2₄, ¯1₄, 0₄, 1₄, 2₄, 3₄}
であるとします。私はS
上で、次の操作を定義したい:と場合のみS
が負の場合は1を返し多値論理を効率的な論理論理に変換するにはどうすればよいですか?
S < 0
。¯S
S
の否定を返します。S + 0
S
に0を加えたものです。S
は変更されていません。S + 1
S
の絶対値+1に添字を法とする1を返します。たとえば:¯1₃ + 1
と1₃ + 1
の両方が2₃
に評価されます。¯2₃ + 1
および2₃ + 1
は、0₃
と評価されます。0₃ + 1
は、1₃
と評価されます。
S ¢ 0
carry(S + 0
)を返します。これはゼロです。S ¢ 1
S + 1
のキャリーを返します。これはがn > 1
の場合にのみ1になります。
この情報は、真理値表の形式でキャプチャすることができます:私は何をしたいか
S S<0 ¯S S+0 S+1 S¢0 S¢1
┌───┬───┬───┬───┬───┬───┬───┐
│ 0₁│ 0 │ 0₁│ 0₁│ 0₁│ 0 │ 0 │
├───┼───┼───┼───┼───┼───┼───┤
│¯1₂│ 1 │ 1₂│¯1₂│ 0₂│ 0 │ 1 │
├───┼───┼───┼───┼───┼───┼───┤
│ 0₂│ 0 │ 0₂│ 0₂│ 1₂│ 0 │ 0 │
├───┼───┼───┼───┼───┼───┼───┤
│ 1₂│ 0 │¯1₂│ 1₂│ 0₂│ 0 │ 1 │
├───┼───┼───┼───┼───┼───┼───┤
│¯2₃│ 1 │ 2₃│¯2₃│ 0₃│ 0 │ 1 │
├───┼───┼───┼───┼───┼───┼───┤
│¯1₃│ 1 │ 1₃│¯1₃│ 2₃│ 0 │ 0 │
├───┼───┼───┼───┼───┼───┼───┤
│ 0₃│ 0 │ 0₃│ 0₃│ 1₃│ 0 │ 0 │
├───┼───┼───┼───┼───┼───┼───┤
│ 1₃│ 0 │¯1₃│ 1₃│ 2₃│ 0 │ 0 │
├───┼───┼───┼───┼───┼───┼───┤
│ 2₃│ 0 │¯2₃│ 2₃│ 0₃│ 0 │ 1 │
├───┼───┼───┼───┼───┼───┼───┤
│¯3₄│ 1 │ 3₄│¯3₄│ 0₄│ 0 │ 1 │
├───┼───┼───┼───┼───┼───┼───┤
│¯2₄│ 1 │ 2₄│¯2₄│ 3₄│ 0 │ 0 │
├───┼───┼───┼───┼───┼───┼───┤
│¯1₄│ 1 │ 1₄│¯1₄│ 2₄│ 0 │ 0 │
├───┼───┼───┼───┼───┼───┼───┤
│ 0₄│ 0 │ 0₄│ 0₄│ 1₄│ 0 │ 0 │
├───┼───┼───┼───┼───┼───┼───┤
│ 1₄│ 0 │¯1₄│ 1₄│ 2₄│ 0 │ 0 │
├───┼───┼───┼───┼───┼───┼───┤
│ 2₄│ 0 │¯2₄│ 2₄│ 3₄│ 0 │ 0 │
├───┼───┼───┼───┼───┼───┼───┤
│ 3₄│ 0 │¯3₄│ 3₄│ 0₄│ 0 │ 1 │
└───┴───┴───┴───┴───┴───┴───┘
は、私が実装できるように、この複数の値を持つ真理値表は、ブール真理値表に変換され並列演算のためのビット演算子を使用した演算。十分に簡単です。 0000
を0₁
,0001
から¯1₂
、...、1111
から3₄
に割り当てます。結果として得られるKarnaugh mapを解いてCNFまたはDNFという式を取得し、それを1日と呼びます。
残念なことに、結果のCNFまたはDNF式は、ブール値にS
のこの素朴なマッピングでは効率的でない場合があります。私はブール値の真理値表としてこの多値真理値表を表現する最も効率的な方法を見つけたいと思っています。ここで、効率的とは、少数の演算子を用いて、加算、否定、キャリー、およびその順序での比較が優先されて、様々な演算を実現することを意味する。しかし、問題は、または20922789888000
の方法でブール値にS
をマッピングすることです。強引な力よりも解決策を見つける良い方法はありますか?
左の列に「1」と「0」を追加しないでください。 –
あなたは何を意味するのか分かりません。 –
「1」と「0」も論理値でなければなりません。 '112 + 0'は' 112'ですが、 '1 + 0'は何ですか?ところで、ビットシフト演算子は許可されていますか? –