• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

비트 연산자 질문입니다.

22.10.25 23:42 작성 조회수 192

1

int num1 = 2;

int num2 = 10;

System.out.println(num1 & num2); //2

System.out.println(num1 | num2); //10

System.out.println(num1 ^ num2); //8

System.out.println(~num1); //3

 

이렇게 4가지 답이 나오는게 이해가 안갑니다 ㅠㅠ

 

답변 1

답변을 작성해보세요.

0

kavindutk님의 프로필

kavindutk

2022.10.30

안녕하세요!

비트 연산자에 대해 정확이 이해하고 싶다면 먼저 숫자 체계 (Number Systen) 를 잘 공부하세요.

2진수 ,8진수, 16진수,Second complement 등을 알고 있으면 너무 유용합니다.

 

  1. & (AND) 연산자는. 두 비트가 모두 1일 때만 1을 반환합니다.

    0 & 0 => 0을 반환

    0 & 1 => 0을 반환

    1 & 0 => 0을 반환

    1 & 1 => 1을 반환

     

    System.out.println(num1 & num2); //2

    00000010 <= num1

    00001010 <= num2

    00000010 <= 답변

     

  2. | (OR) 연산자는 두 개의 비트 중 하나라도 1이면 1로 반환합니다.

    0 | 0 => 0을 반환

    0 | 1 => 1을 반환

    1 | 0 => 1을 반환

    1 | 1 => 1을 반환

    System.out.println(num1 | num2); //10

    00000010 <= num1

    00001010 <= num2

    00001010 <= 답변

     

  3. ^ (XOR) 연산자는 두 개의 비트가 서로 다른 경우에 1을 반환합니다

    0 ^ 0 => 0을 반환

    0 ^ 1 => 1을 반환

    1 ^ 0 => 1을 반환

    1 ^ 1 => 0을 반환

    System.out.println(num1 ^ num2); //8

    00000010 <= num1

    00001010 <= num2

    00001000 <= 답변

     

  4. ~(NOT) 연산자는 0 이면 1로, 1 이면 0로 바꿔줍니다. 이거는 아주 간단하네용 ㅎㅎ

    ~0 => 1을 반환

    ~1 => 0을 반환

    System.out.println(~num1); // -3

    00000010 <= num1

    11111101

     

    8 비트로 이렇게 표현 하면 num1 의 값을 반전시킨 것을 볼 수 있습니다.

    그리고 MSB (Most Significant Bit)도 1로 반환되었는데. 그래서 이렇게 음수 값을 나옵니다.