나의 IT일지
연산자(산술, 단항, 비교) 본문
컴퓨터는 프로그램에 의해 운영되며, 프로그램은 명령어의 집합이다. 이러한 프로그램에서 데이터를 처리하여 명령어의 결과를 산출하는데, 이러한 작업을 연산이라고 한다.
연산자
연산자란 연산에 사용되는 표시나 기호로, 데이터를 연산하기 위해서 사용하는 명령어이다. 이때, 연산자와 함께 연산되는 데이터를 피연산자라 하며, 연산자와 피연산자를 이용하여 만든 식을 연산식이라고 한다.
연산자 종류 | 연산자 | 피연산자 수 | 산출값 | 기능 |
산술 | +, -, *, /, % | 이항 | 숫자 | 사칙연산 및 나머지 계산 |
부호 | +, - | 단항 | 숫자 | 음수와 양수의 부호 |
문자열 | + | 이항 | 문자열 | 두 문자열을 연결 |
대입 | =, +=, -=, *=, /=, %= | 이항 | 다양 | 우변의 값을 좌변의 변수에 대입 |
증감 | ++, -- | 단항 | 숫자 | 1만큼 증감 |
비교 | ==, !=, >, <, <=, >= | 단항 | 논리 | 값의 비교 |
논리 | !, &&, || | 단항 or 이항 | 논리 | 논리 부정, 논리곱, 논리합 |
비트 논리 | &, |, ^ , ! | 단항 or 이항 | 논리 | 비트 논리 부정, 비트 논리곱, 비트 논리합 |
비트 쉬프트 | <<, >> | 이항 | 숫자 | 비트 데이터값 이동 |
조건 | (조건)? 참:거짓 | 삼항 | 다양 | 조건식에 따라 참 또는 거짓 중 하나 선택 |
연산자의 우선순위
하나의 수식에 여러개의 연산자가 있을 때, 어떤 연산자를 먼저 계산해야 하는가에 따라 결과가 달라진다. 예를 들면, "2+3*5"를 연산하면 "17"라는 값이 나오지만 "(2+3)*5"를 연산하면 "25"라는 값이 나온다.
- 최우선 연산자"[ ],( )"
- 단항 연산자 "!, ~, +, -, ++"
- 산술 연산자 "+, -, *, /, %"
- 쉬프트 연산자 "<<,>>"
- 관계 연산자 "<, >,==, !="
- 논리 연산자 "&&, ||"
- 삼항 연산자 "(조건)? 참 :거짓"
- 대입 연산자 "=, +=,-="
이때 우선순위가 동일한 연산자가 사용될 경우, 왼쪽부터 차례대로 연산이 된다. 하지만 대입 연산자나 단항연산자가 같은 수식에 2개 이상 사용될 경우에는 오른쪽 부터 차례대로 연산이 된다. 그리고 산술연산식 같은 경우, "*, /, %"부터 연산 후, "+, -"연산이 진행된다.
산술연산자
산술 연산자는 수학에서 사용하는 사칙연산으로 값을 연산하는 연산자로, 두 값을 더하고 빼고 곱하고 나누고 나머지를 구하고 부호를 변경하는 역할을 한다.
산술 연산자로 식을 만들 때, 수학에서는 숫자나 미지수로만 식을 만들지만, 프로그래밍에서는 문자형인 값으로도 식을 만들 수 있다.
연산자 | 이름 및 기능 | 예시 | 뜻 |
+ | 덧셈 | a+b | a와b를 더하기 |
- | 뺄셈 | a-b | a와b를 빼기 |
* | 곱셈 | a*b | a와b를 곱하기 |
/ | 나눗셈 | a/b | a와b를 나누기 |
% | 나머지 | a%b | a와b를 나눈 나머지 |
산술연산자의 특징은 피연산자의 타입이 동일하지 않을경우 다음과 같은 규칙을 사용해서 피연산자들의 타입을 일치시킨 후 연산을 수행시킨다.
- 피연산자들이 byte,short,char타입일 경우, 모두 int타입으로 변환된 후 연산 진행 (ex: 'A'+1 => 65+1 => 'B')
- 피연산자들이 모두 정수 타입이고 long타입이 포함되어 있을 경우, 모두 long타입으로 변환 후 연산 진행
- 피연산자 중 실수타입이 있을 경우, 허용 범위가 큰 실수 타입으로 변환 후 연산 진행
package pack1;
public class C1 {
public static void main(String[] args) {
int a=10;
int b=3;
float c= 3f; //자동형변환이 진행되며 c=3.0f로 저장
double d = 3; //자동형변환이 진행되며 d=3.0으로 저장
byte e = 127;
byte f = 2;
System.out.println(a+b);
System.out.println(a-b);
System.out.println(a*b);
System.out.println(a/b);
System.out.println(a%b);
System.out.println(a/d); // int/float = float
System.out.println(a%d); // int/double = double
System.out.println(e+f); // byte+byte -> int+int=int
}
}
"System.out.println(a%d);"를 보면 "int / double"이며, 결과가 "3.3333333333333335"인 것을 확인 할 수 있다. 이는 컴퓨터가 무한한 실수를 표현할때 정확하게 표현 할 수 없기에 나타나는 현상이다. 이를 실수의 오류라고 하는데, 무한한 실수의 갯수를 유한한 표현방법으로 표현할 수 없기 때문에, 근접한 값을 표현하는 것이다.
단항연산자
단항 연산자는 피연산자가 하나뿐인 연산자로, 값의 부호를 변경하는 부호연산자, 논리형 변수의 값을 변경하는 논리부정연산자, 변수의 값을 1 증감시키는 증감연산자가 있다.
부호연산자
부호 연산자란 변수 앞에 붙어 변수의 값의 부호를 변경하는 연산자로, boolean타입과 char타입을 제외한 나머지 타입에 사용할 수 있다.
연산자 | 이름 및 부호 | 예시 | 뜻 |
+ | 부호 유지 연산자 | +a | a의 부호 유지 |
- | 부호 변경 연산자 | -a | a의 부호 변경 |
package pack1;
public class C2 {
public static void main(String[] args) {
//부호 연산자
int a = -1;
int b = 2;
System.out.println(-a);
System.out.println(-b);
}
}
논리 부정 연산자
논리부정연산자는 boolean형 변수에 사용하는 연산자로, true를 false로 false를 true로 변경해 준다.
연산자 | 기능 | 예시 | 뜻 |
! | true면 false로, false면 true로 변경 | !a | a가 true면 false, false면 true |
package pack1;
public class C3 {
public static void main(String[] args) {
//논리부정 연산자
boolean a = true;
boolean b = false;
System.out.println(!a);
System.out.println(!b);
}
}
증감연산자
증감연산자란 변수의 값을 1 증가시키거나 1 감소시키는 연산자로, boolean타입을 제외한 나머지 타입에 사용할 수 있으며, char타입은 아스키코드(유니코드)를 통해 증감이 된다.
연산자 | 기능 | 예시 | 뜻 | |
전위형 | 후위형 | |||
++ | 변수의 값을 1 증가 후, 변수에 저장 | ++a | a++ | 변수a의 저장된 값을 1 증가 후, 변수에 저장 |
-- | 변수의 값을 1 감소후, 변수에 저장 | --a | a-- | 변수a의 저장된 값을 1 감소 후, 변수에 저장 |
package pack1;
public class C2 {
public static void main(String[] args) {
int e = 1;
int f = 1;
System.out.println(++e); //증가 후, 출력
System.out.println(f++); //출력 후, 증가
System.out.println(f);
}
}
이때, 전위형은 변수의 값 증감이 먼저 이뤄지고 변수의 값을 사용하는 반면, 후위형은 변수의 값 사용 후에 변수의 값 증감하는 것을 확인 할 수 있다.
비교연산자(관계연산자)
비교 연산자는 boolean형을 제외한 타입에서 사용이 가능한 연산자로, 피연산자의 대소 또는 동등을 비교하여 true, false를 산출하는 연산자이다. 두 값의 크기를 비교하는 대소비교 연산자와 두 값이 같은지 다른지 확인하는 동등비교 연산자로 구분할 수 있다.
연산자 | 기능 | 예시 | 뜻 |
== | 같다 | a==b | a와b가 같으면 참 |
!= | 다르다 | a!=b | a와 b가 다르면 참 |
< | 작다 | a<b | a가 b보다 작으면 참 |
> | 크다 | a>b | a가 b보다 크면 참 |
<= | 작거나 같다 | a<=b | a가 b보다 작거나 같으면 참 |
>= | 크거나 같다 | a>=b | a가 b보다 크거나 같으면 참 |
비교 연산자를 해석할 때에는 왼쪽에 있는 데이터를 주어로, 오른쪽에 있는 데이터를 비교대상으로 하여 해석해야 한다. "a<=b"같은 경우에도, b가 a보다 크거나 같으면 참이 아닌, a가 b보다 작거나 같으면 참으로 해석해줘야 한다.
package pack1;
public class C2 {
public static void main(String[] args) {
//비교연산자
int g = 1;
int h = 2;
int i = 3;
double j =3.14;
double k =5.14;
System.out.println(g<h);
System.out.println(h>i);
System.out.println(g+h <= i);
System.out.println(g+h >= i);
System.out.println(g+h != i);
System.out.println(j == h);
String c1 = "hello";
System.out.println(c1 == "hello");
System.out.println(c1.equals("hello")); //문자열 안에 있는 메서드
System.out.println(c1.equals("Hello")); //문자열 안에 있는 메서드
}
}
문자열 또한 동등비교연산자를 통해 비교를 할 수 있다. 하지만 문자열이 같은지 다른지를 비교하는 용도로 사용되지 않는다. 그래서 문자열 변수는 String클레스에 있는 "equals메소드"로 문자열 비교를 한다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
연산자(삼항, 대입) (1) | 2023.03.18 |
---|---|
연산자 (논리, 비트) (1) | 2023.03.17 |
변수와 상수 (0) | 2023.03.15 |
Java 프로그래밍의 이해 (0) | 2023.03.14 |
JDK와 Eclipse 설치 (0) | 2023.03.11 |