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로 만든 등가 회로보다 저렴하기 때문에 (트랜지스터 수가 적음) 하드웨어 설계에 매우 유용합니다. 하드웨어 디자인 언어가 게이트를 포함하는 이유 중 하나 인 게이트; 또 다른 이유는 특정 비트 인증 트릭에 유용 할 수 있기 때문입니다.
아니요, 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
일부 언어는 또한와 함께 while
또는로 조건을 표현할 수있는 루프 명령어를 제공 until
하므로보다 "긍정적 인"방법을 선택할 수 있습니다. 이 지침은, 예를 들어 있습니다 until c do ...
에서 루비 , do until c ...
에서 비주얼 베이직 , 또는 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 아니며, x는 2 아니다"보다 처리하기가 훨씬 쉽다 "x는 없다 어느 쪽도 1,도 2".
Repeat
... Until
항상 루프 본문을 적어도 한 번 실행합니다. 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
, or
그리고 not
그때까지 그들로부터 synthesied 수 있습니다. 유일한 문제는 이것이 엄청나게 다루기 힘들다는 것입니다. 예를 들어 Wikipedia의 NOR 논리 및 NAND 논리 를 참조하십시오 .
nor
포함 되지 않는지 실제로 설명 하지 않습니다. 그렇지 않으면 언어에 왜 and
및 or
? De Morgan 덕분에 중복됩니다. 사실, 당신은 세 가지 기존의 논리 연산자 (대체 할 수 and
, or
, not
제공) 단지 nor
당신이 바르게 관찰.
and
, or
그리고 not
- 그 대부분의 인간의 언어는 무엇을 사용하기 때문이다. 일단 당신의 정신적 모델과 일치하거나 일치하지 않으면, 중복되지도 않습니다. 그들의 중복성은 "n (ot) and"및 "n (ot) or"라는 이름으로 인코딩됩니다. 만약 우리가 합성 된 단어뿐만 아니라 그들에 대한 기존의 영어 용어를 가지고 있다면, 아마도 더 자주 보게 될 것입니다.
not
, and
,는 or
. 예를 들어, 일부 기본 방언 (GW-BASIC, QuickBASIC,…)에는 추가 연산자로서 배타적 또는 XOR, 의미 IMP (→ NOT (x XOR y)) 및 동등성 EQV (→ NOT (x) OR y)가 있습니다.
예, APL 과 일부 방언에는 nor (및 nand )가 있습니다. APL에서, 도 표시된다 ⍱
(이후 ∨
인 이나 와 ~
있다 없습니다 )
∇ result←ExampleOne color
:If (color≡'green')⍱(color≡'blue')
result←'warm'
:Else
result←'cold'
:EndIf
∇
∇ result←ExampleTwo(x y)
:If x⍱y
result←'x is false and y is false'
:Else
result←'at least one of them is true'
:EndIf
∇
이 답변은 1960 년대 중반에 만들어진 컴퓨터의 어셈블러 언어에서 나온 것입니다. 꽤 모호하지만 일부 측면에서 귀하의 질문을 해결합니다.
DEC (Digital Equipment Corporation)는 1960 년대 중반 PDP-6 컴퓨터를 출시했습니다. 이 기계에는 두 개의 피연산자 (일부 퇴화 사례 포함)에 대한 부울 연산 인 총 64 개의 명령어가있었습니다. 이 64 개의 명령어는 실제로 각 연산자마다 4 개의 변형이있는 16 개의 연산자입니다.
ANDCB와 ORCB 연산자 중 2 개는 NOR과 NAND를 각각 구현했습니다 (이중 부정 논리에서 혼동되지 않는 한). opcode 테이블을 볼 수 있습니다 . opcode 테이블은 실제로 PDP-6의 후속 제품인 PDP-10 컴퓨터를위한 것입니다.
이진수로 수치 명령을 보면 더 흥미로워집니다. 400-477 (8 진수) 범위의 모든 opcode에 대해 명령어 자체의 4 비트는 16 개의 부울 연산자에 대해 4 비트 진리표를 제공합니다. 이 연산자 중 일부는 입력 중 하나 또는 둘 다를 무시합니다. 예를 들어 SETZ 및 SETO는 두 입력을 모두 무시합니다.
PDP-6의 설계자들은이 사실을 이용하여 이들 명령을 일부만 구현하는 것보다 적은 논리로 모든 명령을 구현했습니다. 이러한 명령어 중 일부는 어셈블리 언어 코드에서 거의 나타나지 않았습니다. 그러나 그들은 모두 거기에있었습니다.
따라서 ANDCB는 NOR과 같습니다. (내 논리를 거꾸로하지 않는 한 ORCB는 동일합니다).
nor
운영자는 당신이 그것을 발견하기 어려운 버그의 많은으로 이어질 수밖에 없다, 이는 반복되지 않을 것 설명한다.
"예제 2"는 기본적으로 다음과 같습니다.
if (false nor false) {
becomes
if (true) {
그러나 세 가지 변수를 사용하여 다시 시도하고 결과를 확인하십시오.
if (false nor false nor false) {
becomes
if ((false nor false) nor false) {
becomes
if (true nor false) {
becomes
if (false) {
or
그리고!
대부분의 사람들이 특히 어려운 읽고 찾아 - 더블 네거티브는 거의 사용되지 않는다 때문이다.