programing

NOT(~) vs NEGATION(!)

starjava 2023. 10. 9. 21:17
반응형

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…111111110.

단,

  • !01,!anythingElse0
  • -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마지막으로 인쇄하는 값입니다.

!반면에 오퍼레이터는 생산할 것입니다.10이 주어졌을 때만.그래서 루프가 인쇄되는 겁니다-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

반응형