NOT(~) vs NEGATION(!)
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int i=-5;
while(~(i))
{
cout<<i;
++i;
}
}
출력은 -5,-4,-3,-2입니다.값을 -1까지 인쇄해야 하는 것 아닌가요?왜 -2까지 밖에 안 되는 거지?그리고 not 연산자와 negation 연산자의 차이점을 설명해주세요.내가 프로그램을 쓸 때마다 그것들은 버그의 근원이었습니다.
while(i)
0을 제외한 양과 음의 i에 대해서는 루프 조건이 성립할 것으로 알고 있습니다.
while(!i) vs while(~i)
위의 두 루프가 실행되는 'i'의 값은 무엇입니까?
언제i
에 도달.-1
, 의 가치~i
가~-1
, 아니면0
, 그래서.while
루프가 실행을 중지합니다.!
연산자는 완전히 다른 일을 하기 때문에 작동합니다. 결과적으로1
위해서0
가치관과0
다른 값들에 대해서도 말입니다.~
약간 현명한 부정입니다.
좀 더 자세히 알아보겠습니다.
~
각 비트를 숫자로 가져와서 토글합니다.예를 들어, 10010은2 01101이2 됩니다.-1
는 2의 보어 부호가 있는 정수일 때 모두 이진법으로 된 것입니다.~0b…11111111
가0
.
단,
!0
가1
,!anythingElse
가0
-1
그렇지 않습니다0
!-1
아직은0
그리고 만약 당신이 정말로 다음을 포함해서 루프를 하고 싶다면.i == -1
, 쓰임새만while (i)
대신에while (~i)
.
당신 말이 맞습니다.i == -1
출구 조건이 되는 것: 당신의 루프는 다음과 같습니다.
int i=-5;
while(i != -1)
{
cout<<i;
++i;
}
// i == -1 immediately after the loop
이런 식으로 쓰여질 때, 그 이유가 분명해야 합니다.-1
값이 인쇄되지 않은 상태에서 값이 먼저 인쇄된 후 증가하는 경우가 그 이유입니다.-2
마지막으로 인쇄하는 값입니다.
그!
반면에 오퍼레이터는 생산할 것입니다.1
0이 주어졌을 때만.그래서 루프가 인쇄되는 겁니다-1
그 때에!
연산자는 루프 조건에서 사용됩니다.
'~' 는 다음 연산자입니다: ~x = -x-1이고 i = -1일 때는 ~i = 0입니다. ~i의 값이 궁금하다면 그냥 출력하면 됩니다.
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int i=-5;
for (int i = -5; i <= 3; i++)
{
cout<<i<<" "<<(~i)<<endl;
}
}
-5 4 -4 3 -3 2 -2 1 -1 0 -1 1 -2 2 -3 3 -4
!
참입니다/false 논리 뒤집기
!
수단any nonzero becomes 0
,그리고.0 becomes 1
예를 들면 1.!0b1010 -> 0b0000
예2.!0b0000 -> 0b0001
예3.!0b1111 -> 0b0000
일반화된out = in?0:1
그 동안에...
~
약간 뒤집혀요.
~
수단flip each and every bit
예를 들면 1.~0b1010 -> 0b0101
예2.~0b0000 -> 0b1111
예3.~0b1111 -> 0b0000
일반화된out = in^0b1111
언급URL : https://stackoverflow.com/questions/11572181/not-vs-negation
'programing' 카테고리의 다른 글
c에서 printf를 통해 char array를 인쇄하는 방법? (0) | 2023.10.09 |
---|---|
StAX보다 SAX를 언제 선택해야 합니까? (0) | 2023.10.09 |
셸 스크립트로 MariaDB 설치를 자동화하려면 어떻게 해야 합니까? (0) | 2023.10.09 |
mysql 커뮤니티 서버 대 mysql 설치 관리자 (0) | 2023.10.09 |
최대 절전 모드를 사용하여 열을 선택하는 방법은 무엇입니까? (0) | 2023.10.09 |