'java 연산자'에 해당되는 글 1건

  1. 2011.10.06 Java - 자바 연산자 ( 연산자우선순위 )

Java - 자바 연산자 ( 연산자우선순위 )

Java 2011.10.06 19:22

연산자라는 것은 어떤 대상체에 대해 계산같은 처리를 수행하도록 하는 특수한 문자 기호라는 것은 아실거라 생각합니다.
그 연산자가 여러가지 이지만 그 중에서도 먼저 처리하도록 하는 우선순위가 존재합니다.

연산자 우선순위

1 - 최우선연산자 : . [ ] ( )
2 - 단항연산자 : ! ~ +/- ++/-- (cast)
3 - 산술연산자 : + - * / %
4 - 시프트연산자 : << >> >>>
5 - 관계연산자 : > < <== >== == !=
6 - 비트연산자 : & ^ |
7 - 논리연산자 : && ||
8 - 삼항연산자 : 조건항 ? 항1 : 항2
9 - 배정대입연산자 : = += -= *= /= %= <<= >>= ^= &= |=
10 - 후위형증감연산자 : ++/--
11 - 순차연산자 : ,

이러한 우선순위에 따라서 여러가지 연산자가 사용됬을 경우 프로그램처리를 처리하게 됩니다.
그러면 연산자에 대해 살펴보겠습니다.


(1) 최우선연산자

최우선 연산자는 수학 연산을 할 때 쓰는 괄호의 역할을 한다. [] 가 () 보다 먼저 실행된다
온점은 dot operator 라고 불리며 보통 상위 디렉토리를 나타내는 연산자이다
괄호 안의 내용부터 먼저 계산하게 하는 역할을 한다


(2) 단항연산자

피연산자오직 하나 필요한 연산자이다
! 은 논리값을 부정한다. 즉 true는 false로 바꾸고 false는 true로 바꾸는 역할을한다
~ 은 비트 부정 연산자이다
비트 부정 연산자가 연산을 할 때에는 피연산자를 int형으로 변화시키고
작업이 이루어진다
long 형을 제외한 모든 정수형 변수들을 int형으로 맞춘 후 0은 1로,
1은 0으로 값을 바꾸는
역할을 한다. 정 반대의 값을 취하게 할 경우 사용한다
일반적으로 (원래값)*-1 -1 의 값으로 변환된다 (데이터의 손실이 없을 경우)

+/- 는 수의 부호를 나타낸다. +는 양수를 나타내고 -는 음수를 나타낸다
++변수이름 / --변수이름 은 해당하는 변수의 값을 +1 하거나 -1 하는 작업을 한다
(cast) 는 cast 대신에 캐스팅 하고싶은 변수의 타입을 적어주면 된다

 

(3) 산술연산자

기본적인 사칙연산나머지연산을 하는 가장 기본이 되는 연산자이다
+,-는 값을 원하는 만큼 더하고 빼는 역할을 한다
*, / 은 각각 곱셈과 나눗셈을 나타내는데 +와 - 보다 먼저 실행되는 연산자이다
 
%은 나머지를 값으로 돌려주는 연산자이다
예를들어, 14%4 라는 연산을 할 경우 2라는 값이 결과값이 된다 

 
(4) 시프트 연산자

시프트 연산자는 변수나 어떤 수의 비트를 이동시키는 연산자이다
 << 은 대상을 2진 비트로 바꾼 후 왼쪽으로 비트들을 한칸씩 미는 작업을 한다
이 때 빈 자리는 0값으로 채운다. ~처럼 비트를 직접 다루기 때문에 모든 변수 타입을
int 형으로 변환한 후에 사용한다
>> 은 대상을 2진 비트로 바꾼 후 오른쪽으로 비트들 한칸씩 미는 작업을 한다
이 때 마찬가지로 빈 칸은 0 으로 채운다. 마찬가지로 long 형을 제외한
나머지 변수들은 int형으로 변환한 후 사용된다 
>>> 은 >>와 기본적인 원리는 똑같다. 그러나 원본 데이터가 음수일 경우에도
앞쪽의 비트를 0으로 값을 채운다
즉, 오로지 양수 값만 다룰 수 있다. C
/C++ 의 경우에는 unsigned 의 역할을 하는 연산자라고 생각하면 된다


(5) 관계 연산자

연산자의 왼쪽과 오른쪽의 피연산자들의 크기 관계를 비교하여 참과 거짓을 가리는 연산자이다
<, >, <=, >= 은 순서대로 미만, 초과, 이하, 이상을 나타낸다
==, != 은 두 피연산자의 값이 같은지 다른지의 참 거짓을 판별한다
!=의 경우 두 피연산자의 값이 같을 경우 true 값을, 같으면 false 를 나타낸다


(6) 비트 연산자

비트 연산자는 데이터의 값을 32bit의 이진 비트로 변환시켜 각 비트간의 연산한다
AND 연산자 (&)
각 위치에 대응되는 비트가 모두 1 을 나타낼 경우에는 그대로 1을
하나라도 0 일경우에는 0을 넣는 비트 연산자 이다
0000 0000 0000 0000 0000 0000 0000 0101 = 5
0000 0000 0000 0000 0000 0000 0000 0110 = 6 
&
0000 0000 0000 0000 0000 0000 0000 0100 = 4

Exclusive OR 연산자(^)
대조되는 비트가 서로 다를 경우에는 결과값을 1로 주고 서로 같을 경우에는 0으로 주는 연산자이다
0000 0000 0000 0000 0000 0000 0000 0111 = 7
0
000 0000 0000 0000 0000 0000 0000 0100 = 4
^
0000 0000 0000 0000 0000 0000 0000 0011 = 3

OR 연산자 (|)
대조되는 비트가 모두 0일 경우에는 결과 값으로 0을 주고 한쪽이라도 1일 경우 1을 준다
0
000 0000 0000 0000 0000 0000 0000 0111 = 7
0000 0000 0000 0000 0000 0000 0000 0100 = 4
|
0000 0000 0000 0000 0000 0000 0000 0111 = 7


(7) 논리 연산자
&&은 피연산자 둘 다 true 일 경우에는 true 값을, 하나라도 false 일 경우 false 값을 결과로 갖는다
반대로 ||은 피연산자 중 하나라도 true 일 경우에 true 값을 결과로 갖는다


(8) 삼항 연산자

유일하게 세 개의 항으로 만들어져 있는 연산자이다
조건항 ? 항1 : 항2  의 구조를 띄는데 이는 조건항이 참일 경우에는 항1을 실행하고 거짓일 경우에는 항2 실행한다는 것이다
[예]
short a = 10;
short b = 20;
short c = a>b ? a: b;

코드를 실행하면 a>b 가 false 이기 때문에 c의 값에는 b의 값인 20이 들어가게된다

 

(9) 배정대입연산자

즉, 값을 변수에 대입하는 대입 연산자이다
a = a+1, a= a-2, a=a*3;, a=a/4;, a=a%5 등의 문장은 다음과 같이 바꿔서 쓸 수 있다 
a+=1 , a-=2, a*=3, a/=4, a%=5 로 간단히 줄여서 쓸 수 있다


(10) 후위형증감연산자

변수뒤에 쓰이는 증감연산자, 배정대입연산자보다 우선순위가 낮다.
int a = 5
4 + ++a * 3 = 22
산술연산자보다 높은 단항연산자 ++이기 때문에 ++a가 먼저 실행되기때문에
a의 값은 6이 되어 결과는 22가 된다.
int a = 5
4 + a++ * 3 = 19
하지만 후위형증감연산자의 경우 대입연산자보다 우선순위가 낮기 때문에
처리가 되지 않는다.


(11) 순차연산자

특정 데이터를 순차적으로 처리하도록 할때 , 연산자를 사용하고 , 순위에서 제일 낮다.
byte a = 10 , b = 20;


여기까지 연산자의 우선순위에 대해서 알아보았습니다.
다른 궁금한 사항은 댓글로 달아주세요.
뷰 한번씩만 눌러주시면 고맙겠습니다.
저작자 표시
신고
Trackback 0 : Comment 0

Write a comment