반응형

 

연산자(Operator)


연산자란 어떤 대상체에 대해 계산을 수행하도록 하는 특수한 문자 기호의 총칭이다.
그래서 어떤 연산자가 먼저 실행하는지, 그 연산자가 어떠한 일을 하는지 알아야 한다.

일반적인 실행순서는 왼쪽에서 오른쪽, 위에서 아래이지만, 예외적인 상황 중 하나가
연산자가 사용되었을 때 이다.

 

boolean bool = 4 + 5 > 2 - 1 * 7 && (12 & 3 * 2) > 7 || -2 != 2;

 

위 결과는 bool 변수에 true 값이 저장된다.

     이유는??
     우선 ()안을 먼저 계산 하는데 & 와 * 중 * 를 먼저 계산해야 하므로
     (12&6) 00001100 & 00000110 = 00000100 이므로 닶은 4
     남은 식은 4+5>2-1*7&&4>7||-2!=2
     산술연산을 해준다. *와 /가 +나 -보다 우선순위가 높으므로
     9>-5 && 4>7 || -2!=2
     관계연산자를 계산해 준다.
     9>-5 true && 4>7 false 결과는 false
     그래서 || 연산을 진행 -2!=2 true
     결과는 true이다.
 
연산자의 우선순위
최우선연산자 > 단항 연산자 > 산술연산자 > 쉬프트 연산자 > 관계연산자 > 비트연산자
> 논리연산자 > 삼항 연산자 > 배정대입연산자 > 증감후위연산자 > 순차연산자

 


최우선연산자 - “.”, “[]”, “()”


. : 참조연산자 - 클래스의 멤버를 사용하기 위해 사용됨
[] : 배열참조연산자? - 배열의 위치 번째를 나타낼 때 사용됨
() : 괄호연산자 - 특정연산자를 묶어 먼저 처리할 수 있게 만들어 주는 연산자

     


실행결과

 


단항 연산자 - "!" , "~" , "+/-" , "++/--" , "(cast 자료형)" , "instanceof"


! : 논리부정 - 내용의 반대되는 값을 표현, boolean자료형에서만 사용가능

     


실행결과

 


~ : 비트부정 - 비트단위로 부정을 한후, 2진수 0은 1로, 1은 0으로 바꾸는 작업
    boolean, 실수형자료형에서는 사용 불가
    byte,short,char,int 형은 ~연산후 int형이나 long형에 결과값을 담을수 있고
    long형은 ~연산후 long형에만 담을수 있다.

     

 

실행결과

     

 


+/- : 부호연산자

 

++/-- : 특정필드의 값을 하나 증감시키는 연산자
앞쪽에 적히는 경우가 우선순위 2순위인 단항연산이고 
뒤에 붙으면 우선순위 11위인인 증감 연산 후위형에 속한다.
int a=5; int k = 4 + ++a * 3; k=22, a=6(연산 전 계산)
int a=5l int k = 4 + a++ * 3; k=19, a=6(연산 후 계산)

 

실행결과

 

 


실행결과

 

(cast 자료형) - ex : int i = 1; byte by = (int) i;
단항 연산자라고 알아두자.


실행결과

 

instanceof
객체의 타입을 비교 하는 연산자로서 우변의 객체와 좌변의 객체의 타입을 비교
우변과 좌변의 객체의 타입이 서로 같다면 true 그렇지 않다면 false를 반환

 

실행결과

 

산술연산자 - +, -, *, /, %


byte, short, char, int형의 자료형의 연산은 int 형의 자료형으로 나타나며
long, float, double형의 자료형은 큰 자료형의 결과로 나타난다
(long<float<double)
float형과 double형의 연산은 혼용하여 사용하지 않는 것이 좋다.

 

실행결과

 

나눗셈과 나머지 구하는 문제


실행결과

 


시프트연산자 “<<“ ,“>>”,“>>>”

 - 자바프로그램에서 사용하는 기본 메모리는 32비트인데,
   때때로 메모리 절약을 위해 int형 하나의 데이터에 16비트씩 2개의
   데이터를 함께 사용하는 경우나, 8비트씩 4개의 데이터를 함께
   사용하는 경우, 필요한 데이터의 결과값만 꺼내려고 할 때 사용

 

대상필드의 값을 2진비트로 바꾼 후 특정 비트 수 만큼 이동시켜 원하는
부분의 비트데이터를 얻어내는 연산자
boolean형, float형, double형에서는 사용할 수 없다.


a<<b : left shift 연산자
a의 값을 2진비트로 바꾼 후 왼쪽으로 b비트 수 만큼 이동시키고 빈자리는
0으로 채우는 연산자
예) 2<<3
2을 32비트로 분해한 다음 왼쪽으로 3bit 이동시켜라.

 

앞의 000 은 버리고 뒤의 ???는 000 으로 채운다.
결과는 16이다.

적용 공식 : 원본데이터 * 2^이동변수

 

 

a>>b : right shift 연산자
a의 값을 2진비트로 바꾼 후 오른쪽으로 b비트 수 만큼 이동시키고 빈자리는
원본 데이터의 값이 양수이면 0을, 음수이면 1을 채우는 연산자

 

적용 공식 : 원본데이터 / 2^이동변수

 

“>>>”unsigned right shift 연산자
>> 연산자와 기본원리는 똑같으나, 원본 데이터가 음수일 경우에도 앞의 빈
비트를 0으로 채운다는 사실이 다르다. 자바에만 있는 기술이다.
원본데이터에 관계없이 결과는 무조건 양수로만 나타나게 된다.

 

 

 


예제)


실행결과


 

관계 연산자

 

비교관계 : “>”, “<“, “>=“, “<=“
항등관계 : “==“, “!=“
비교관계연산자는 다 아는 경우이고,
항등관계 연산자는 피 연산자들이 서로 같은지 다른지를 판단하는 것


== 는 비교하는 두 개의 피연산자가 같으면 true, 다르면 false
!= 는 비교하는 두 개의 피연산자가 같으면 false, 다르면 true 반환

- !=는 관계연산자 이지만, =!는 뒤의 연산자를 부정한 후 대입하라는 뜻

예)

 

실행결과

 


비트연산자 - “&”, “|”, “^”


& - and연산자, 대조되는 비트가 모두 1일때 결과값을 1로 주는 연산자
| - or연산자, 대조되는 비트 한쪽이라도 1이면 결과값은 1로주는 연산자
^ - exclusive or연산자, 대조되는 비트가 다르면 1을 주는 연산자

예)


실행결과

 


논리연산자 - “&&”, “||”


“&&”- and연산자, 피연산자를 비교하여 둘 다 참이면 true 아니면 false
“||”- or연산자, 피연산자를 비교하여 둘 중 하나만 참이면 ture, 아니면 false

 

예)

 

실행결과

 

예)

 

 


실행결과

 

예)


실행결과

 


삼항 연산자 : “조건항 ? 항1 : 항2”
 조건항이 참이면 항1번을 시행하고 조건항이 거짓이면 항2번을 실행한다.


실행결과
1을 입력한 경우

 

2를 입력한 경우

 

 

삼항 연산자에서 범하기 쉬운 오류(특히 c언어 배우신분들)

 

  예1)
  int a = 10;
  a == 10 ? System.out.println("같다!") : System.out.println("다르다!");
  => not a statement 성립되지 않는 문장입니다.
 
  int a = 10;
  System.out.println(a == 10 ? "같다!" : "다르다!"); 로 고쳐줘야 한다.

 

  예2)

  String str = ""; int a = 0;
  a != 0 ? str = "남성" : str = "여성";
  => unexpected type ... 오류가 발생한다.

 

  String str = ""; int a = 0;
  str = a != 0 ? "남성" : "여성";

  자바는 문장의 형식(행위)을 중시한다.


배정대입연산자 : =, *=, /=, %=, +=, -=, <<=, >>=, >>>=
= :
대입연산자, 단순히 오른쪽에 있는 값을 왼쪽으로 옮겨라.
byte a = 5;


배정연산자
  a = a - 5; 라고 하면 5값은 int형이라 오류가 발생한다.(형변환을 해줘야 함)
  이럴 때 형변환을 쓰지 않으면서 결과값은 같게 나오게 하는 해결책
  우선적으로 배정되어 있는 다른 연산이 먼저 발생한 후에 대입연산을 해라
   ex) a += b => a = a + b;
   ex) a -= b => a = a - b;
   ex) a *= b => a = a * b;
   ex) a /= b => a = a / b;
   ex) a %= b => a = a % b;
   ex) a <<= b => a = a << b;
   ex) a >>= b => a = a >> b;
   ex) a >>>= b => a = a >>> b;

 

     예)

 

실행결과


개념 적용 실습

연산자의 우선순위를 적어본다(필히 암기해야 함)

 

값을 받아들여 1이면 합격을 2이면 불합격이라는 글자를 출력하는 프로그램을 만드시오.
    입력
 - 합격여부를 입력하세요.(합격 : 1, 불합격 : 2) : 1
 - 당신은 합격 입니다.

 

문자 하나를 입력 받아서 그 문자가 산술 연산자인지 아닌지를 판단하는 프로그램을 만드시오.
    입력
 - 산술연산자를 입력하세요(+,-,*,/,%) : +
 - + 는 산술연산자입니다.
 - 산술연산자를 입력하세요(+,-,*,/,%) : a
 - a 는 산술연산자가 아닙니다.

반응형

'교육자료 > Java' 카테고리의 다른 글

Java 제어문 switch case  (0) 2017.06.13
Java 제어문 if와 else  (0) 2017.06.13
Java 기본 입출력  (0) 2017.06.11
Java 자료형(Data Type)  (0) 2017.06.07
Java 변수와 상수  (0) 2017.06.07

+ Recent posts