norに相当する演算子はありますか?たとえば、私の好きな色は緑でも青でもありません。
そして、コードは次と同等になります。
// example one
if (color!="green" && color!="blue") {
}
// example two
if (x nor y) {
// x is false and y is false
}
color not in ['green', 'blue']
norに相当する演算子はありますか?たとえば、私の好きな色は緑でも青でもありません。
そして、コードは次と同等になります。
// example one
if (color!="green" && color!="blue") {
}
// example two
if (x nor y) {
// x is false and y is false
}
color not in ['green', 'blue']
回答:
主流の言語には専用のNORおよびNAND演算子がありませんが、あまり知られていない言語(たとえば、「ゴルフ」言語)にはあります。例えば、APLを有する⍱
と⍲
、それぞれ、NORおよびNANDため。
別のクラスの例は、VHDL、Verilogなどのハードウェア設計言語で見つけることができます。NANDおよびNORゲートは、通常はAND / OR / NOTで作成された等価回路よりも安価(必要なトランジスタが少ない)であるため、ハードウェア設計で非常に役立ちますハードウェア設計言語がゲートを含む傾向がある理由の1つであるゲート。もう1つの理由は、特定のビットをいじるトリックに役立つ可能性があることです。
いいえ、nor
高レベルの主流のプログラミング言語には演算子はありません。
主に読みにくいからです:
not
は、最初のオペランドが暗黙的であることを意味しますが、読者は後でこれを理解するだけです(x nor y)
と(x and not y)
の代わりに、((not x) and (not y))
or
当てはまらない明らかなセマンティックと混同されていますnor
は、他のすべての論理ゲートを作成するために使用できる基本的なハードウェアゲートです。したがって、他のすべての論理演算子は組み合わせでnor
あり、最も単純な基本論理演算子であると主張できます。
ただし、ハードウェアに当てはまることは、必ずしも人間に当てはまるわけではありません。また、ハードウェアレベルでの人気にもかかわらず、一部のメインストリームCPUはNOR
、アセンブラー命令セット(x86など)を提供していません。
可読性が重要です。また、他の方法で改善できる場合もあります。
例えば:
if x not in [1,2] // use of 'in' or 'not in' operator instead of x!=1 and x!=2
if x==1 or x==2
action A
else
action B
の代わりに
if x!=1 and x!=2
action B
else
action A
一部の言語では、with while
またはwithのいずれかで条件を表現できるループ命令も提供されてuntil
おり、より「ポジティブな」方法を選択できます。これらの命令は、例えばある until c do ...
ではルビー、do until c ...
中VB、またはrepeat ... until c
にパスカルとその子孫。
例えば:
Until (x==1 or x==2) do
...
と同等です:
While (x!=1 and x!=2)
...
まだnor
構文を好む場合は、ショートカットが発生することを期待していない場合にのみ、関数を定義できます。
If ( nor(x,y) ) // attention, x and y will always be evaluated
...
否定はすべての引数に適用されることを読者はすぐに理解するため、演算子よりも関数の方が読みやすいという利点があります。一部の言語では、可変数の引数を使用して関数を定義できます。
while (not (x == 1 or x == 2))
を見つけて、x != 1 and x != 2
「xは1でも2でもない」という処理を「xが1ではなく、xが2ではない」よりもはるかに簡単だと書きます。
Repeat
...はUntil
常にループ本体を少なくとも1回実行します。xが1の場合、ループ本体は実行されますが、繰り返されません。While
ループは、この場合には、本体を実行しません。
nor(x,y)
が常に評価されるかどうかnor()
は、言語と実装方法によって異なります。呼び出された関数が引数を評価するかどうか、いつ評価するかを決定できる言語(D、Io、…)があります。
質問に対する@KilianFothのコメントはスポットライトです。
あなたは合成することができますnor
から、not
とor
。
if (x nor y)
とまったく同じです
if (not (x or y))
紹介nor
( -たかっ必要とされていないではないか)別のオペレータとしては、どちらも必要なく、また求められていた言語に冗長性を、ご紹介します。
同様に、私が持つ任意の言語を認識していないですnand
演算子を-それはから合成することができるからでしょうnot
し、and
事業者。
理論上は、演算子のみnand
またはnor
演算子のみで言語を作成できます。、、およびのすべてはand
、それらから合成されます。唯一の問題は、これが途方もなく扱いにくいことです。例については、WikipediaのNORロジックおよびNANDロジックを参照してください。or
not
nor
は、含まれない理由を実際に説明しません。それ以外の場合、言語にはなぜand
andがあるのor
ですか?De Morganのおかげで冗長です。実際には、すべての3つの従来の論理演算子(置き換えることができand
、をor
、not
提供することで)ちょうど nor
あなたが正しく観察されるように、。
and
。or
そしてnot
、それがほとんどの人間の言語が使用するものだからです。and / or / notのメンタルモデルに一致すると、nor&nandは冗長になります。それらの冗長性は、「n(ot)and」および「n(ot)or」という名前でエンコードされています。合成された用語だけでなく、既存の明確な既存の英語の用語がある場合は、おそらくより頻繁に表示されるでしょう。
not
、and
、or
。たとえば、一部のBASIC方言(GW-BASIC、QuickBASICなど)には、排他的またはXOR、含意IMP(→NOT(x XOR y))、および等価EQV(→NOT(x)OR y)が追加の演算子としてあります。
この答えは、1960年代半ばに作られたコンピューターのアセンブラー言語からです。それはかなりあいまいですが、いくつかの点であなたの質問に対処します。
DEC(Digital Equipment Corporation)は、1960年代半ばにPDP-6コンピューターを発売しました。このマシンには、2つのオペランドに対するブール演算である合計64の命令がありました(一部の縮退した場合を含む)。これらの64の命令は、実際には各演算子に4つのバリアントを持つ16の演算子でした。
ANDCBとORCBの2つの演算子は、それぞれNORとNANDを実装しました(二重負論理で混乱しない限り)。オペコード表を見ることができ ます。オペコードテーブルは、実際にはPDP-6の後継であるPDP-10コンピューター用です。
バイナリの数値命令を見ると、より興味深いものになります。400〜477(8進数)の範囲のすべてのオペコードに対して、命令自体の4ビットが16のブール演算子の4ビットの真理値表を提供することがわかります。これらの演算子の一部は、入力の一方または両方を無視します。たとえば、SETZとSETOは両方の入力を無視します。
PDP-6の設計者は、この事実を利用して、これらの命令すべてを、それらの一部のみを実装する場合よりも少ないロジックで実装しました。これらの命令の一部は、アセンブリ言語コードにはめったに登場しませんでした。しかし、それらはすべてそこにありました。
したがって、ANDCBはNORと同等です。(ここでも、論理を逆にした場合を除き、ORCBは同等です)。
nor
あなたはそれを説明したように、オペレータは、バグを発見することは困難の多くにつながるにバインドされ、再現性ではないでしょう。
あなたの「例2」は本質的にこれです:
if (false nor false) {
becomes
if (true) {
ただし、3つの変数を使用してもう一度試して、何が起こるかを確認してください。
if (false nor false nor false) {
becomes
if ((false nor false) nor false) {
becomes
if (true nor false) {
becomes
if (false) {
or
あり!
、二重ネガはほとんど使用されないため、ほとんどの人は特に読みにくいと感じています。