프로그래밍/자바(java) 융합개발자 2차

[취성패] 자바 배우기 - 선수학습(연산자II-증감, 대입, 비트논리, 비트시프트)

aSpring 2020. 12. 12. 01:32
728x90
728x90

 

이진연산

- 이분법적 요소를 가진 곳에 사용 가능

- 모터의 On, Off나 LED의 점등, 소등에 활용 가능

 

1. 증감연산자 : 증가 감소 연산자

++ : 증가 연산자. 변수의 값을 1 증가

--   : 감소 연산자. 변수의 값을 1 감소시킴

 

증감연산자의 위치에 따라 전위, 후휘의 형태로 나뉘어짐

++A : A의 값을 1 증가(전위 연산) -> A = A+1

A++ : A의 값을 1 증가(후위 연산) -> A = A+1 은 동일함

 

ex) A = 3 일 때,

B = A++; -> B에는 증가되기 전 값인 3이 저장됨, A변수는 4가 됨

B = ++A; -> B에는 증가된 후의 값인 4가 저장되고 A변수에도 4가 저장됨.

 

--A   : A의 값을 1 감소(전위 연산) -> B = A-1

A--   : A의 값을 1 감소(후위 연산) -> B = A-1

 

 

2. 대입연산자 : 연산과 저장을 동시에 할 수 있음.

- 왼쪽 변수에 저장되어 있는 값과 연산 후에 결과값을 다시 저장함

- 연산자를 간결하게 표현할 수 있음

 

ex) A=3, B=2 일 때,

A += B -> A = A+B = 3+2 =5   -> A와 B를 더한 값을 A에 저장

A -= B  -> 1

A *= B -> 6     ( A = A * B = 3 * 2 = 6)

A /= B -> 1.5   (A 변수를 반드시 실수 형태로 선언해야 함!)

A %= B -> 1    (A = A%B)

 

A와 B 모두 정수이더라도 나눗셈을 했을 때는 결과가 실수로 나올 수 있음.

따라서 변수 설정 중요!

 

 

비트단위 연산자

1. 비트 논리 연산자

- 정수형 데이터는 2진수(0, 1) 형태로 기억장소에 저장됨

- 비트 단위 연산자는 정수형 데이터에서만 사용함

- 비트 단위 연산자는 2진수나 16진수(0~15) 데이터를 사용하여 적용해야 함.

- 16진수 : 0~9는 숫자로, 10(A), 11(B) ~ 15(F)

 

A & B  -> A와 B의 각 비트끼리 And 연산(비트 and)   cf) && 논리And

   ex) A에 8비트로 3이 저장되어있으면               0000 0011

        B에 8비트로 2가 저장되어있으면               0000 0010

        -> A&B -> (둘 다 1일 때만 1, 나머지는 0) = 0000 0010 = 2

 

A | B   -> A와 B의 각 비트끼리 Or 연산(비트 or)

    ex) A|B = 0000 0011 = 3

 

A ^ B  -> A와 B의 각 XOR 연산(서로 다를 경우 1, 같을 경우 0)

    ex) A ^ B = 0000 0001 = 1

 

ㄴ> 이항연산

 

~A      -> A의 각 비트를 반전(not) = 1111 1100

ㄴ> 단항연산

 

 

2. 비트 시프트 연산자

- 정수형 데이터를 지정한 비트만큼 왼쪽 또는 오른쪽으로 이동시킴

- 왼쪽으로 한 번 시프트 한 경우 2를 곱한 결과와 동일

- 오른쪽으로 한 번 시프트 한 경우 2로 나눈 결과와 동일

 

A<<B : A를 B비트만큼 왼쪽으로 이동시키고 오른쪽 비트는 0으로 채움

ex) 바이트 타입으로 A변수에 1 저장.

A : 0000 0001 -> 1

   -> A<<1 : 0000 0010 -> 2

   -> A<<2 : 0000 0100 -> 4

   -> A<<3                 -> 8

   -> A<<4                 -> 16

 

A>>B : A를 B비트만큼 오른쪽으로 이동시키고 좌측 비트는 양수일 경우 0, 음수일 경우 1로 채움

ex) A = 0000 0100 -> 4 일 때,

   -> A>>1 : 0000 0010 -> 2

        음수면 1

A>>>B : A를 B비트만큼 오른쪽으로 이동시키고 좌측 비트는 항상 0으로 채움

 (양, 음수 따지지 않고)

 

 

 

증감 연산자 사용 예)

 

public class Exam5_1 {

        public static void main(String[] args) {

               int iNum = 10, result;

               result = ++iNum1;

               System.out.println(result);            -> 11

               System.out.println(iNum1);          -> 11

               result = iNum1++;                    -> iNum의 값이 다음 라인부터 +1됨. result에는 증가 전인 11 저장.

               System.out.print(result);             -> 11

               System.out.print(iNum1);            -> 12

 

        }

 

}

 

 

대입연산자 사용 예)

 

public class Exam5_2 {

        public static void main(String[] args) {

               int result = 10;

               result += 1;  //result = result + 1;

               System.out.println(result);                -> 11

               result -=1;

               System.out.println(result);                -> 10

        }

 

}

 

 

비트단위 연산자 사용 예)

 

public class Exam5_1 {

        public static void main(String[] args) {

              int iNum = 7, iNum2 = 5, result;

              result = iNum1 & iNum2;

             //           111        101

             //                 101

              System.out.println(result);            ->  5

             result = iNum1 | iNum2;              -> 111

              System.out.println(result);            -> 7

              result = iNum1 << 2;                  

             // 0011100

               System.out.print(result);            -> 7*2^2 = 28

              result = iNum1 >> 2;     

              System.out.print(result);           -> 7/2^2 = 1.75이니까 결과값은 정수 1

 

        }

 

}

728x90
728x90