구너드 2023. 5. 9. 23:49

연산자

 

-연산자:연산을 수행하는 기호

-피연산자:연산자의 연산 수행 대상

-모든 연산자는 연산결과를 반환한다 ex) ()는 연산자가 아님

 

  • 연산자의 종류

-산술 연산자,비교 연산자,논리 연산자,대입 연산자,기타 연산자

-연산 순서를 수동으로 결정하고 싶다면 괄호 사용

 

  • 연산자의 우선순위

-산술>비교>논리>대입 / 단항>이항>삼항
-대입과 단항을 제외한 모든 연산자는 왼쪽에서 오른쪽 순서로 진행


  • 증감 연산자와 부호 연산자

-증가 연산자(++):피연산자의 값을 1증가

-감소 연산자(--):피연산자의 값을 1감소

-증감 연산자가 독립적으로 사용된 경우 전위형과 후위형의 차이는 없음

Ex1)++k; k++;의 값은 동일

Ex2) 

++j

k=j

k=++j

 

k=j

j++

k=j++

https://www.youtube.com/watch?v=d2uDDwz2fuc&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=25

 


  • 형변환 연산자

-변수 또는 상수의 타입을 다른 타입으로 변환하는 것

-(타입)피연산자 ex) int-char/(char)65/'A'

 

  • 자동 형변환

-float f=1234;

int 타입의 값을 float타입의 변수에 저장(상대적으로 int타입이 float타입보다 크기가 작기 때문에 가능)

 

-float f=(float)1234;

변수와 리터럴의 타입을 일치시켜줘야 함,우리가 보는 코드에는 형변환이 생략되어있음, 컴파일러에 의해 자동으로 형변환

 

-int i = 3.14f;

큰 타입을 작은 타입에 저장할 때 Error가 발생 

위 값이 int타입으로 변환될 때 소수점이 사라지면서 원래 값이 달라짐

값 손실이 발생하는데 이런 경우 컴파일러가 자동으로 형변환을 안 해줌

따라서 int i = (int) 3.14f;로 수동 변환(값은 3,소수점 사라지면서 값 손실 발생)

 

-기존의 값을 최대한 보존할수 있는 타입으로 자동 형 변환

서로 다른 두 타입을 일치시키기 위해서 형변환을 하는데 이를 생략하면 컴파일러가 자동으로 현변환을 함

표현범위가 좁은 타입에서 넓은 타입으로 형변환을 하는 경우에는 값 손실이 없기 때문에 두 타입 중 범위가 더 넓은 쪽으로 형변환이 진행

 


  • 산술변환

-연산 전에 피연산자의 타입을 일치시키는 것을 의미

 

-두 피연산자의 타입을 같게 일치시킴(보다 큰 타입으로)

Ex)long + int - long +long - long

 

-피연산자의 타입이 int보다 작은 타입이면 int로 변환 됨(int보다 작은 타입이 계산을 통해 쉽게 범위가 넘어갈 수 있기 때문에 오버플로우가 발생해 정확한 계산값을 가져오지 못할 수 있어서 미리 큰 범위인 int타입으로 변환시킨 후 계산하는 것)

Ex)byte + short - int +int - int

 


  • Math 클래스와 나머지 연산자

-Math는 수학과 관련된 메서드를 가지고 있는 클래스(메서드는 특정한 기능을 수행하기 위해 코드로 작성된 단위)

Ex) round():실수를 소수점 첫 째자리에서 반올림한 정수를 반환

      ceil():올림값을 double 형으로 반환

      floor():내림값을 double 형으로 반환

      abs():int,double 기본형 모두 사용가능하며 절대값으로 반환

System.out.println("반올림 : " + Math.round(num)); // 반올림 : 3
System.out.println("올림 : " + Math.ceil(num)); // 올림 : 4.0
System.out.println("내림 : " + Math.floor(num)); // 내림 : 3.0
System.out.println("절대값 : " + Math.abs(num*-1)); // 절대값 : 3.14

-나머지 연산자 %

-오른쪽 피연산자로 나누고 남은 나머지를 반환

-나누는 피연산자는 0이 아닌 정수만 허용

-부호는 무시


  • 비교 연산자

-두 피연산자를 비교해서 true 또는 false를 반환

Ex)

==:왼쪽 피연산자와 오른쪽 피연산자가 같으면 참을 반환

!=: 왼쪽 피연산자와 오른쪽 피연산자가 같지 않으면 참을 반환

etc

 

-문자열의 비교에는 == 대신 equals()를 사용해야함

-equals:비교하고자 하는 두 피연산자의 값 자체를 비교

-==:비교하고자 하는 두 피연산자의 주소값을 비교


  • 논리 연산자

-&&(논리 AND 연산):논리식이 모두 참이면 참을 반환

-||(논리 OR 연산):논리식 중에서 하나라도 참이면 참을 반환

-!(논리 NOT 연산):논리식의 결과가 참이면 거짓을,거짓이면 참을 반환함

-&&: 논리식이 모두 참이어야 true, 그 외는 모두 false

-||: 논리식이 하나라도 참이면 true, 두 개 모두 false 일 경우 false


  • 조건 연산자

-삼항 연산자:조건식 ? 반환값1 : 반환값2;

  • 대입연산자
=:왼쪽의 피연산자에 오른쪽의 피연산자를 대입

+=:왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후,그 결과를 왼쪽의 피연산자에 대입

-=:왼쪽의 피연산자에 오른쪽의 피연산자를 뺀 후,  "

*=:왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후, "

/=:왼쪽의 피연산자에 오른쪽의 피연산자를 나눈 후, "

%=:왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 나머지를 왼쪽의 피연산자에 대입

&=:왼쪽의 피연산자를 오른쪽의 피연산자와 비트 AND 연산한 후, 그 결과를 왼쪽의 피연산자에 대입

^=:왼쪽의 피연산자를 오른쪽의 피연산자와 비트 XOR 연산한 후, "

<<=:왼쪽의 피연산자를 오른쪽의 피연산자만큼 왼쪽 시프트한 후, "

>>=:왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호를 유지하며 오른쪽 시프트 한 후, "

>>>=:왼쪽의 피연산자를 오른쪽의 피연산자만큼 부호에 상관없이 오른쪽 시프트한 후, "