[JAVA NOTE]4. Operator

43320 단어 JavaJava

기본


연산

  • 수, 함수 등에서 일정한 법칙에 따라 결과를 내는 조작

연산자

  • 수,함수 등에서 일정한 법칙에 따라 결과를 내는 조작을 위한 인자






대입연산자


  • 우측의 값을 좌측에 대입한다.
    → 우측 값을 좌측에 대입하면 우측의 값은 변하지 않으나 좌측의 변수만 변한다.
    → 몇몇 특수한 경우를 제외하면 기본적으로 좌측과 우측의 자료형이 동일할 때 대입 연산자 사용이 가능함
    → 다른 자료형간의 대입연산자 사용시 형변환을 사용할 것
import java.io.*;

class Main {
public static void main(String[] args) throws Exception {
		int a = 100;
    	System.out.print(a);
    }
}






산술연산자


  • 덧셈,뺄셈,나눗셈,나머지 등이 여기에 해당함



덧셈연산자 +


  • 연산자 좌,우의 값을 더하는 연산자
import java.io.*;
class Main {
	public static void main(String[] args) throws Exception {
		int a = 3;
		int b = 4;
		System.out.println(a+b);
	}
}




뺄셈연산자 -


  • 연산자 좌측 값에서 우측의 값을 빼는 연산자
import java.io.*;
class Main {
    public static void main(String[] args) throws Exception {
        int a = 10;
        int b = 2;
        System.out.println(a-b);
    }
}




곱셈연산자 *


  • 연산자 좌측 값과 우측 값을 곱하는 연산자
import java.io.*;
class Main {
    public static void main(String[] args) throws Exception {
        int a = 7;
        int b = 3;
        System.out.println(a*b);
    }
}




나눗셈연산자 /


  • 연산자 좌측 → 나누어지는 대상
  • 연산자 우측 → 좌측 값을 나눌 값
  • 나눗셈을 실행한 뒤 생기는 몫을 반환하는 연산자
import java.io.*;
class Main {
    public static void main(String[] args) throws Exception {
        int a = 17;
        int b = 3;
        System.out.println(a/b);
    }
}




나머지연산자 %


  • 나눗셈 실행시 생기는 몫과 나머지 부분 중 나머지를 반환하는 연산자
import java.io.*;
class Main {
    public static void main(String[] args) throws Exception {
        int a = 17;
        int b = 3;
        System.out.println(a/b);
    }
}






복합대입연산자


  • 대입연산자와 산술연산자가 합쳐진 모습
- += a = a + b
- -= a = a - b
- *= a = a * b
- /= a = a / b
- %= a = a % b
import java.io.*;
class Main {
    public static void main(String[] args) throws Exception {
        int a = 1;
        a += 2;	// a = a + 2; 와 같음
        System.out.println(a);

        int b = 5;
        b -= 1;	// b = b - 1; 과 같음
        System.out.println(b);
	
        int c = 2;
        c *= 3;	// c = c * 3; 과 같음
        System.out.println(c);

        int d = 6;
        d /= 2;	// d = d / 2; 와 같음
        System.out.println(d);

        int e = 9;
        e %= 2;	// e = e % 2; 와 같음
        System.out.println(e);
    }
}






비교연산자


  • 연산자의 좌우 값을 비교하는 연산자
  • 일반적인 산수의 부등호와 같은 역할 함
  • 결과는 boolean형(true or false)로 반환합니다.
import java.io.*;
class Main {
    public static void main(String[] args) throws Exception {
        int a = 4;
        int b = 3;
        System.out.println(a < b);
    }
}






전위/후위 연산자


  • int 자료형에 사용할 수 있는 연산자

  • 사용 위치에 따라 “전위/후위”로 나누어진다.

  • ++ → 1 증가시킴

  • -- → 1 감소시킴

  • 전위 연산자

    → 변수 앞에 적용된 연산자

  • 후위 연산자

    → 변수 뒤에 적용된 연산자

import java.io.*;
class Main {
    public static void main(String[] args) throws Exception {
        int a = 5;
        ++a;
        System.out.println(a);
			
        int b = 1;
        b++;
        System.out.println(b);
			
        int c = 3;
        --c;
        System.out.println(c);
			
        int d = 6;
        d--;
        System.out.println(d);
    }
}
  • 전위 후위 연산자의 차이점

    → 실행되는 타이밍에서 차이점이 발생한다.

    import java.io.*;
    class Main {
        public static void main(String[] args) throws Exception {
            int a = 2;
            System.out.println(++a);
            System.out.println(a++);			
            System.out.println(a);
        }
    }
  • 출력값 : 3,3,4

  • a=2로 초기화 되어 있음 그 다음줄 출력문에서 ++a에서 전위 연산자 이므로 우선순위가 가장 높아 출력보다 1 증가되어 출력되게 됨 그 다음 a++은 후위 연산자로 우선순위가 낮아 출력을 한 후 연산을 진행하게 되어 그 다음 출력문에서 a는 4이므로 다음과 같이 출력되게 되는 거임






논리 연산자


  • 비교연산자를 통해 도출된 true/false에 대한 논리조합
  • AND(&&),OR(||),NOT(!) 이 있음



AND(&&)


  • 좌우 값이 모두 true일때만 true를 반환 시킴 그 외의 모든 값은 false로 반환됨
  • 좌우 값이 하나라도 false인 경우 false가 출력
import java.io.*;
class Main {
    public static void main(String[] args) throws Exception {
      System.out.println(true && true);		// true이고 true이면 true
      System.out.println(true && false);	// true이고 false이면 false
      System.out.println(false && true);	// false이고 true이면 false
      System.out.println(false && false);	// fasle이고 false이면 false
    }
}




OR(||)


  • 좌우 값이 하나라도 true라면 true를 반환시킴
  • 좌우 값이 둘다 false일 때를 제외하고는 전부 다 true 반환
import java.io.*;
class Main {
    public static void main(String[] args) throws Exception {
      System.out.println(true || true);		// true이거나 true이면 true
      System.out.println(true || false);	// true이거나 false이면 true
      System.out.println(false || true);	// false이거나 true이면 true
      System.out.println(false || false);	// flase이거나 false이면 false
    }
}




NOT(!)


  • true는 false로, false는 true로 반환시킴
  • 참과 거짓을 반전 시킨다고 생각 하면 됨
import java.io.*;
class Main {
    public static void main(String[] args) throws Exception {
      int a = 3;
      int b = 4;
      System.out.println(!(a == b));
    }
}

//원래는 false가 맞으나 !로 반전시킴



결과표




비트 연산자


  • 비트 단위의 연산을 위한 연산자
  • 각 비트 하나씩 연산을 수행함



& 연산자


  • 같은 위치의 bit간에 둘 다 1일 경우 1이 됨
  • AND 연산자의 비트 버전느낌




| 연산자


  • 같은 위치의 bit간에 하나라도 1일 경우 1이 됨
  • OR 연산자의 비트 버전느낌




^ 연산자


  • 같은 위치간에 하나만 1일 경우 1이 됨 → 비트가 서로 달라야 한다라고 생각하면 편함
  • XOR 연산




~연산자


  • bit의 0과 1을 바꿔준다.






Shift (시프트) 연산자


  • 비트를 좌,우로 밀어주는 연산수행




<< 왼쪽 시프트연산자


  • 비트를 왼쪽으로 밀어낸 뒤 공백을 0으로 채움
11001010 << 2

-> 00101000
//왼쪽 11이 사라지고 오른쪽에 00이 새로 붙음




>> 오른쪽 시프트연산자


  • 오른쪽으로 밀어내지만 가장 왼쪽 비트와 동일한 숫자로 공백을 채움
11001010 >> 3

-> 11111001
// 오른쪽에 있던 010이 사라지고 밀어내기 전 
// 가장 왼쪽에 숫자가 1이기에 왼쪽에 111이 추가된 것을 볼수 있음




>>> 논리 오른쪽 시프트연산자


  • 비트를 우측으로 밀어내면서 공백을 0으로 채우는 연산






연산자 우선순위 (명령어 실행 순서)


  • 연산자는 다음 우선순위에 맞게 실행됨






오버플로(Overflow)와 언더플로(Underflow)

기본 상식


  • 컴퓨터는 메모리에 0과 1을 이용한 2진수의 형태로 데이터를 저장함 메모리에 할당되는 제일 첫 비트는 음/양을 나타내는 부호자리
    • 0일경우 0 및 양수
    • 1일경우 음수를 나타내게됨
  • int형은 32bit(4byte)크기의 자료형이지만 제일 첫 bit는 부호를 나타내는 숫자이므로 231-2^{31} ~ 23112^{31} -1




컴퓨터가 값을 저장하는 방법


  • 예를 들어 8bit 저장공간을 사용하는 정수형 변수 A가 있다고 가정하고 변수에 10을 넣는다고 가정
    1. 메모리에 8bit(1byte) 공간이 할당됨
    2. 그 공간에 정수가 할당 되게 되고 10이라는 정수 값이 저장되게됨
    3. 컴퓨터는 2진수로 저장하므로 메모리에 저장되는 값은 10을 8bit 크기의 2진수로 표현한 0000 1010이 되게됨




오버플로(OVERFLOW)


  • 저장하고자하는 데이터가 자료형이 저장할 수 잇는 최대치보다 큰 숫자를 저장하려고 할 때 생기는 에러
  • 만약 8bit 머신 (-128~127까지 저장가능함)에서 128을 저장하려고 하는 경우 에러가 남 128 → 1000 0000 → 이거는... 부호 1...?! - 0...?! → 오버플로!
import java.io.*;
class Main {
    public static void main(String[] args) {
        // short형 변수 varShort를 선언하고 short형의 최대값으로 초기화
        short varShort = Short.MAX_VALUE;
			
        //varShort 출력
        System.out.println(varShort);
			
        //varShort 변수에 1을 더함
        varShort++;
			
        //varShort 출력
        System.out.println(varShort);
    }
}

//32767
//-32768




언더플로(UNDERFLOW)


  • 저장하고자하는 데이터가 자료형이 저장할 수 있는 최소치보다 작은 숫자를 저장하려고 할 때 생긱는 에러
  • 만약 8bit 머신 (-128~127까지 저장가능함)에서 -129을 저장하려고 하는 경우 에러가 남 -129 → 1 {0000 0000} → 부호 0...?! → 0 → 언더플로!
import java.io.*;
class Main {
    public static void main(String[] args) {
        // short형 변수 varShort를 선언하고 short형의 최소값으로 초기화
        short varShort = Short.MIN_VALUE;
            
        //varShort 출력
        System.out.println(varShort);
            
        //varShort 변수에 1을 차감함
        varShort--;
            
        //varShort 출력
        System.out.println(varShort);

    }
}

//-31768
//32767

좋은 웹페이지 즐겨찾기