의견.png

"연산자"의 두 판 사이의 차이

해시넷
이동: 둘러보기, 검색
1번째 줄: 1번째 줄:
 
'''연산자'''(Operator)는 대부분 기본 자료형의 사칙연산 등의 계산을 위해 사용하는 것으로 기본 자료형을 제외한 참조 자료형은 연산자를 사용할 수 없다.
 
'''연산자'''(Operator)는 대부분 기본 자료형의 사칙연산 등의 계산을 위해 사용하는 것으로 기본 자료형을 제외한 참조 자료형은 연산자를 사용할 수 없다.
 
단, 예외로 String 클래스는 + 연산이 가능하다.
 
단, 예외로 String 클래스는 + 연산이 가능하다.
<ref>, <[https://onsil-thegreenhouse.github.io/programming/java/2017/11/02/java_tutorial_1-4/ 연산자 개념]>, 《Github-Onsil's blog, 2017-11-02</ref>
+
<ref>, <[https://onsil-thegreenhouse.github.io/programming/java/2017/11/02/java_tutorial_1-4/ 연산자 개념]>, 《Github-Onsil's blog》, 2017-11-02</ref>
 
주로 어떤 연산을 할지 지정하는 것을 연산자라하고, 연산의 대상이 되는 것을 피연산자라고 한다.
 
주로 어떤 연산을 할지 지정하는 것을 연산자라하고, 연산의 대상이 되는 것을 피연산자라고 한다.
 
연산자는 작업의 종류에 따라서 대입연산자, 산술연산자, 비교연산자, 논리연산자 등으로 나뉜다.
 
연산자는 작업의 종류에 따라서 대입연산자, 산술연산자, 비교연산자, 논리연산자 등으로 나뉜다.
66번째 줄: 66번째 줄:
  
 
*'''결합방식'''
 
*'''결합방식'''
결합방식(처리순서)는 같은 순위의 연산자가 하나의 수식에 두 개 이상 존재하는 경우 우선적으로 연산하는 방향을 말하는 것으로<ref>, <[https://zapiro.tistory.com/entry/%EC%97%B0%EC%82%B0%EC%9E%90-%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84%EC%99%80-%EA%B2%B0%ED%95%A9%EB%B0%A9%ED%96%A5 연산자 결합방향]>, 《Zapiro.Tistory blog, 2013-04-27</ref> 연산자에 따라 2가지로 나뉜다.
+
결합방식(처리순서)는 같은 순위의 연산자가 하나의 수식에 두 개 이상 존재하는 경우 우선적으로 연산하는 방향을 말하는 것으로<ref>, <[https://zapiro.tistory.com/entry/%EC%97%B0%EC%82%B0%EC%9E%90-%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84%EC%99%80-%EA%B2%B0%ED%95%A9%EB%B0%A9%ED%96%A5 연산자 결합방향]>, 《Zapiro.Tistory blog》, 2013-04-27</ref> 연산자에 따라 2가지로 나뉜다.
 
'(),[],산술,시프트,관계,비트,논리,조건,순서'연산자의 경우 왼쪽에서 오른쪽으로 결합하고, '단항,대입'연산자의 경우 오른쪽에서 왼쪽으로 결합한다.
 
'(),[],산술,시프트,관계,비트,논리,조건,순서'연산자의 경우 왼쪽에서 오른쪽으로 결합하고, '단항,대입'연산자의 경우 오른쪽에서 왼쪽으로 결합한다.
 
같은 순위의 연산자가 하나의 수식에 두 개 이상 존재하는 경우 우선적으로 연산하는 방향을 말한다.
 
같은 순위의 연산자가 하나의 수식에 두 개 이상 존재하는 경우 우선적으로 연산하는 방향을 말한다.
83번째 줄: 83번째 줄:
 
또한, 피연산자의 크기가 4byte보다 작을 경우 4byte(int형)로 변환한 후 연산을 수행한다.
 
또한, 피연산자의 크기가 4byte보다 작을 경우 4byte(int형)로 변환한 후 연산을 수행한다.
 
고려 사항으로는 연산하기 전에 데이터형을 둘 중 더 큰 자료형으로 일치시켜야 하고, 정수와 정수 나눗셈시 정수로 나와야 하므로 소수는 버려지고 정수만 출력된다.
 
고려 사항으로는 연산하기 전에 데이터형을 둘 중 더 큰 자료형으로 일치시켜야 하고, 정수와 정수 나눗셈시 정수로 나와야 하므로 소수는 버려지고 정수만 출력된다.
 +
<ref>, <[https://raccoonjy.tistory.com/9 산술 연산자]>, 《Tistory blog》, 2017-06-30</ref>
 
산술 연산자 중 증감 연산자(++,--)는 전치와 후치로 분류되는데 전치(++a, --a)는 변수 앞에 증감 연산자가 오는 형태로 먼저 변수의 값을 증감시킨 후 변수를 연산에 사용하는 것이고, 후치(a++, a--)는변수 뒤에 증감 연산자가 오는 형태로 먼저 변소를 연산에 사용한 후 변수의 값을 증감시킨다.
 
산술 연산자 중 증감 연산자(++,--)는 전치와 후치로 분류되는데 전치(++a, --a)는 변수 앞에 증감 연산자가 오는 형태로 먼저 변수의 값을 증감시킨 후 변수를 연산에 사용하는 것이고, 후치(a++, a--)는변수 뒤에 증감 연산자가 오는 형태로 먼저 변소를 연산에 사용한 후 변수의 값을 증감시킨다.
  
88번째 줄: 89번째 줄:
  
 
연산자 우선 순위에 따라 '7 % 8'→'3 -'→'+ 5'를 하여 답은 1이 된다.
 
연산자 우선 순위에 따라 '7 % 8'→'3 -'→'+ 5'를 하여 답은 1이 된다.
다음은 java로 표현한 산술 연산자이다.
 
  
 
*'''관계 연산자'''
 
*'''관계 연산자'''
140번째 줄: 140번째 줄:
 
'||'는 OR 연산자로 피연산자 중 어느 한 쪽이 True면 True이다.
 
'||'는 OR 연산자로 피연산자 중 어느 한 쪽이 True면 True이다.
 
같은 조건식이라도 피연산자의 위치에 따라서 연산속도가 달라질 수 있으며, '&&'의 경우에는 연산결과가 false일 확률이 높은 피연산자를 연산자의 좌측에 놓아야 더 빠른 연산결과를 얻을 수 있다.
 
같은 조건식이라도 피연산자의 위치에 따라서 연산속도가 달라질 수 있으며, '&&'의 경우에는 연산결과가 false일 확률이 높은 피연산자를 연산자의 좌측에 놓아야 더 빠른 연산결과를 얻을 수 있다.
<ref name="논리 연산자">, <[https://programmer-seva.tistory.com/9 논리 연산자]>, 《세바의 코딩교실, 2016-01-28</ref>
+
<ref name="논리 연산자">, <[https://programmer-seva.tistory.com/9 논리 연산자]>, 《세바의 코딩교실》, 2016-01-28</ref>
 
:{|class=wikitable width=700 style="background-color:#ffffee"
 
:{|class=wikitable width=700 style="background-color:#ffffee"
 
|+논리 연산자
 
|+논리 연산자
169번째 줄: 169번째 줄:
 
|}
 
|}
 
*'''대입 연산자'''
 
*'''대입 연산자'''
연산 후 결과를 대입하는 연산식을 간략하게 입력할 수 있도록 대입 연산자를 제공하는 것으로 '+= -= *= /= %= <<= >>='가 있다.
+
연산 후 결과를 대입하는 연산식을 간략하게 입력할 수 있도록 대입 연산자를 제공하는 것으로 '+= -= *= /= %= <<= >>='가 있다.  
 +
자바에서는 대입 연산자와 다른 연산자를 결합하여 만든 다양한 복합 대입 연산자를 제공한다.
 +
<ref>, <[http://tcpschool.com/java/java_operator_assignment 대입 연산자]>, 《TCPSCHOOL》, </ref>
 +
 
  
 
*'''조건 연산자'''
 
*'''조건 연산자'''
 
조건에 따라 서로 다른 수식을 수행하는 것이다. 삼항연산자에 속하며 if문으로 처리했을 때보다 라인수를 획기적으로 줄여준다.
 
조건에 따라 서로 다른 수식을 수행하는 것이다. 삼항연산자에 속하며 if문으로 처리했을 때보다 라인수를 획기적으로 줄여준다.
 
따라서 가벼운 로직을 처리한다면 if문 보다는 조건 연산자를 사용하여 처리하는 것이 훨씬 좋다.
 
따라서 가벼운 로직을 처리한다면 if문 보다는 조건 연산자를 사용하여 처리하는 것이 훨씬 좋다.
<ref>, <[https://coding-factory.tistory.com/266 조건 연산자]>, 《코딩팩토리, 2018-12-01</ref>
+
<ref>, <[https://coding-factory.tistory.com/266 조건 연산자]>, 《코딩팩토리》, 2018-12-01</ref>
  
 
  예) 조건 ? 수식1 : 수식2; -> '조건'의 수식이 참이면 '수식1'을 거짓이면 '수식2'를 실행'''
 
  예) 조건 ? 수식1 : 수식2; -> '조건'의 수식이 참이면 '수식1'을 거짓이면 '수식2'를 실행'''
248번째 줄: 251번째 줄:
 
     num2 = num2 >> 2;
 
     num2 = num2 >> 2;
 
     // num2 = 1001 (오른쪽으로 2비트)→ 0010 → 2  
 
     // num2 = 1001 (오른쪽으로 2비트)→ 0010 → 2  
 +
 
*'''논리 연산자'''
 
*'''논리 연산자'''
 
  public static void main(String[] args){
 
  public static void main(String[] args){
283번째 줄: 287번째 줄:
 
*6 자바 JAVA의 비트연산자!, 〈[https://donologue.tistory.com/55 비트연산자 예시]〉, 《Tistory - 구운밤》
 
*6 자바 JAVA의 비트연산자!, 〈[https://donologue.tistory.com/55 비트연산자 예시]〉, 《Tistory - 구운밤》
 
*[Java]삼항 연산자 사용법&예제 <[https://coding-factory.tistory.com/266 조건 연산자]>, 《코딩팩토리》
 
*[Java]삼항 연산자 사용법&예제 <[https://coding-factory.tistory.com/266 조건 연산자]>, 《코딩팩토리》
 +
*자바(Java)의 기초 박살내기-연산자(Operator) <[https://raccoonjy.tistory.com/9 산술 연산자]>, 《Tistory - 너굴너굴 조재연의 프로그래밍》
 +
*대입 연산자 <[http://tcpschool.com/java/java_operator_assignment 대입 연산자]>, 《TCPSCHOOL》
  
 
== 같이 보기 ==
 
== 같이 보기 ==

2020년 8월 6일 (목) 15:37 판

연산자(Operator)는 대부분 기본 자료형의 사칙연산 등의 계산을 위해 사용하는 것으로 기본 자료형을 제외한 참조 자료형은 연산자를 사용할 수 없다. 단, 예외로 String 클래스는 + 연산이 가능하다. [1] 주로 어떤 연산을 할지 지정하는 것을 연산자라하고, 연산의 대상이 되는 것을 피연산자라고 한다. 연산자는 작업의 종류에 따라서 대입연산자, 산술연산자, 비교연산자, 논리연산자 등으로 나뉜다. [2]

개요

어떤 연산을 할지 지정하는 것을 연산자 연산의 대상이 되는 것을 피연산자라고 한다. 예를 들어, x + y가 있을 때, +는 연산자에 x, y는 피연산자에 해당된다. [2] 논리 부정처럼 피연산자가 한 개만 필요하면 단항 연산자, +처럼 피연산자가 두 개 있으면 이항연산자, 세 개 있으면 삼항 연산자라고 한다. [3]

특징

  • 우선순위

하나의 연산식에 여러 개의 연산이 사용되었을 경우 어떤 것을 먼저 처리할지 정하는 것이다. 순서는 단항 연산자→산술 연산자→시프트연산자→관계 연산자→비트 연산자→논리 연산자→조건 연산자→대입 연산자→순서 연산자 순으로 낮아진다. 단, (),[]연산자는 최우선 연산자로 ()는 우선순위 변경을 위해 사용되며, []는 배열의 크기나 첨자를 나타낼 때 사용한다. [3]

연산자 우선순위
대분류 중분류 연산자 결합규칙
단항 연산자 단항 연산자 !(논리 not), ~(비트 not), ++, --, sizeof(기타)
이항 연산자 산술 연산자 *, /, %(나머지)
시프트 연산자 <<, >>, >>>
관계 연산자 <, <=, >, >=, ==, !=
비트 연산자 &(비트 and), ^(비트 xor), |(비트 or)
논리 연산자 &&(논리 and), |두 개(논리 or)
삼항 연산자 조건 연산자 ?, :
대입 연산자 대입 연산자 =, +=, -=, *=, %=, /=, >>=, <<=
순서 연산자 순서 연산자 ,
  • 결합방식

결합방식(처리순서)는 같은 순위의 연산자가 하나의 수식에 두 개 이상 존재하는 경우 우선적으로 연산하는 방향을 말하는 것으로[4] 연산자에 따라 2가지로 나뉜다. '(),[],산술,시프트,관계,비트,논리,조건,순서'연산자의 경우 왼쪽에서 오른쪽으로 결합하고, '단항,대입'연산자의 경우 오른쪽에서 왼쪽으로 결합한다. 같은 순위의 연산자가 하나의 수식에 두 개 이상 존재하는 경우 우선적으로 연산하는 방향을 말한다. [3]

  1. 예) 1+2+3 → 왼쪽에서 오른쪽으로 결합(1+2→+3)
  2. 예) a=b=c=1 → 오른쪽에서 왼쪽으로 결합(c=1→b=c→a=b)

종류

연산자의 종류는 산술연산자, 관계연산자, 비트연산자, 논리연산자, 대입연산자, 조건연산자, 기타 연산자로 나뉜다. [3]

  • 산술 연산자

가, 감, 승, 제 등의 산술 계산에 사용되는 연산자로 '+, -, *, /, %, ++, --'가 있다. 산술 연산자는 안에서도 우선 순위가 나뉘는데 증감 연산자→산술 연산자(* / %)→산술 연산자(+ -)순으로 높아진다. 산술 연산자 중 '* / %'는 우선순위가 같아 왼쪽에서 오른쪽 방향으로 순서대로 계산한다. 또한, 피연산자의 크기가 4byte보다 작을 경우 4byte(int형)로 변환한 후 연산을 수행한다. 고려 사항으로는 연산하기 전에 데이터형을 둘 중 더 큰 자료형으로 일치시켜야 하고, 정수와 정수 나눗셈시 정수로 나와야 하므로 소수는 버려지고 정수만 출력된다. [5] 산술 연산자 중 증감 연산자(++,--)는 전치와 후치로 분류되는데 전치(++a, --a)는 변수 앞에 증감 연산자가 오는 형태로 먼저 변수의 값을 증감시킨 후 변수를 연산에 사용하는 것이고, 후치(a++, a--)는변수 뒤에 증감 연산자가 오는 형태로 먼저 변소를 연산에 사용한 후 변수의 값을 증감시킨다.

예) 3 - 7 % 8 + 5

연산자 우선 순위에 따라 '7 % 8'→'3 -'→'+ 5'를 하여 답은 1이 된다.

  • 관계 연산자

두 수의 관계를 비교하여 참 또는 거짓을 결과로 얻는 연산자로 '== != > >= < <='가 있다. 왼쪽을 기준으로 크다 또는 크거나 같다로 해석한다.

  • 비트 연산자

비트별(0,1)로 연산하여 결과를 얻는 연산자로 '&(and) ^( xor) |(or) ~(not) <<(비트 왼쪽 이동) >>(비트 오른쪽 이동)'이 있다. 실수형인 float와 double을 제외한 모든 기본형에 사용이 가능하며 피연산자를 int타입으로 자동 타입 변환한 후 연산을 수행한다. 그렇기 때문에 byte,short,char타입을 비트 논리 연산하면 그 결과는 int 타입이 된다. '|'는 OR 연산자로 피연산자 중 어느 한 쪽이 1이면 1이다. '&'는 AND 연산자로 피연산자 양 쪽 모두 1이면 1이다. '^'는 XOR 연산자로 피연산자가 서로 다를 때 1이다. [6]

비트 연산자
x y x | y x & y x ^ y
1 1 1 1 0
1 0 1 0 1
0 1 1 0 1
0 0 0 0 0
  • 논리 연산자

논리 연산자는 두 개의 논리 값을 연산하여 참 또는 거짓을 결과로 얻는 연산자로 '!(not) &&(and) ||(or)'이 있다. 피연산자로 boolean형 또는 boolean현 값을 결과로 하는 조건식만을 허용하며 '&&'가 '||'연산보다 우선순위가 높으므로 한 조건식에 '&&'와 '||'가 함께 사용될 때는 괄호를 사용하여 우선순위를 명확하게 해주어야 한다. '&&'는 AND 연산자로 피연산자 양 쪽 모두 True이면 True이다. '||'는 OR 연산자로 피연산자 중 어느 한 쪽이 True면 True이다. 같은 조건식이라도 피연산자의 위치에 따라서 연산속도가 달라질 수 있으며, '&&'의 경우에는 연산결과가 false일 확률이 높은 피연산자를 연산자의 좌측에 놓아야 더 빠른 연산결과를 얻을 수 있다. [6]

논리 연산자
x y x (|두 개) y x && y
true true true true
true false true false
false true true false
false false false false
  • 대입 연산자

연산 후 결과를 대입하는 연산식을 간략하게 입력할 수 있도록 대입 연산자를 제공하는 것으로 '+= -= *= /= %= <<= >>='가 있다. 자바에서는 대입 연산자와 다른 연산자를 결합하여 만든 다양한 복합 대입 연산자를 제공한다. [7]


  • 조건 연산자

조건에 따라 서로 다른 수식을 수행하는 것이다. 삼항연산자에 속하며 if문으로 처리했을 때보다 라인수를 획기적으로 줄여준다. 따라서 가벼운 로직을 처리한다면 if문 보다는 조건 연산자를 사용하여 처리하는 것이 훨씬 좋다. [8]

예) 조건 ? 수식1 : 수식2; -> '조건'의 수식이 참이면 '수식1'을 거짓이면 '수식2'를 실행
  • 기타 연산자

sizeof ,(콤마) (자료형)등이 있다.

활용

  • 산술 연산자
public static void main(String[] args){
   //임의의 변수 선언 후 값 부여
   int i = 5;
   int j = 2;
   int result = i + j;
   System.out.println("덧셈결과 : " + result); → 7
   result = i - j;
   System.out.println("뺄셈결과 : " + result); → 3
   System.out.println("곱셈결과 : " + i*j); → 10
   System.out.println("나눗셈결과 : " + i/j); →2
   System.out.println("나머지결과 : " + i%j); →1
   //우선순위를 보기 위함
   //실제 사용시 소괄호()를 사용하는 것이 좋다.
   //자바에서 +는 숫자일 경우 덧셈이되고 문자는 그 뒤에 붙이는 것이 된다.
}
  • 관계 연산자
public static void main(String[] args){
  int a = 1;
  int b = 2;
  System.out.println(a == b); → false
  System.out.println(a != b); → true
  System.out.println(a > b); → false
  System.out.println(a < b); → true
  System.out.println(a >= b); → false
  System.out.println(a <= b); → true 
} 
  • 비트 연산자

~(not) 연산자

   int num1 = 9;
   int num2 = ~num1
   // num1 = 1001
   // num2 = 0110
   // 비트를 0이면 1로 1이면 0으로 반전시킨다.

&(and) 연산자

   int num1 = 9;
   int num2 = 15;
   int num3 = num1 & num2;
   // num1 = 1001
   // num2 = 1111
   // num3 = 1001
   // 두 비트 모두 1일때 1을 반환한다.

|(or)연산자

   int num1 = 9;
   int num2 = 15;
   int num3 = num1 | num2;
   // num1 = 1001
   // num2 = 1111
   // num3 = 1111
   // 두 비트 중 하나라도 1이면 1을 반환한다. 

^(xor)연산자

   int num1 = 9;
   int num2 = 15;
   int num3 = num1 ^ num2;
   // num1 = 1001
   // num2 = 1111
   // num3 = 0110
   // 두 비트가 다를 때 1을 반환한다. 

시프트 연산자

   int num1 = 9;
   num1 = num1 << 2;
   // num1 = 1001 (왼쪽으로 2비트)→ 0010 0100 → 36
   int num2 = 9;
   num2 = num2 >> 2;
   // num2 = 1001 (오른쪽으로 2비트)→ 0010 → 2 
  • 논리 연산자
public static void main(String[] args){
  var x = 5;
  var y = 10;
  var k = "5";
  • 대입 연산자
public static void main(String[] args){
  double e - 3.1;
  e += 2.1; //e=e+2.1; 자기 자신에게 다시 뎃셈
  e *= 2; //e=e*2; 자기 자신에게 다시 곱셈
  int n = 5;
  n *= 2.2; //n=n*2.2; 자기자신에게 곱셈해서 다시 자기자신에게 넣음
            //2.2는 실수(기본형 double)이므로 n도 실수 double형으로 변경
            //5는 5.0으로 변경, 결과값 11.0이 다시 n으로 정해질 때 int로 변경
  System.out.println(e); //10.4
  System.out.println(n); //11
} 
  • 조건 연산자
  int b = (5 < 4) ? 50 : 40;
  System.out.println(b) → 40
  // (조건문) ? 참일 경우 : 거짓일 경우 

각주

  1. , <연산자 개념>, 《Github-Onsil's blog》, 2017-11-02
  2. 2.0 2.1 , <연산자 개념 및 예시>, 《네이버 지식백과》
  3. 3.0 3.1 3.2 3.3 , <연산자>, 《2020 시나공 정보처리기사 필기》, 2019-11-13
  4. , <연산자 결합방향>, 《Zapiro.Tistory blog》, 2013-04-27
  5. , <산술 연산자>, 《Tistory blog》, 2017-06-30
  6. 6.0 6.1 , <논리 연산자>, 《세바의 코딩교실》, 2016-01-28
  7. , <대입 연산자>, 《TCPSCHOOL》,
  8. , <조건 연산자>, 《코딩팩토리》, 2018-12-01

참고 자료

같이 보기


  의견.png 이 연산자 문서는 프로그래밍에 관한 토막글입니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 이 문서의 내용을 채워주세요.