2013년 8월 8일 목요일

자바의 연산자

이번 강좌에서는 자바에서의 연산자를 배워보도록 하겠습니다.

대부분 언어를 공부해 보신 분들은 수도 없이 많이 보셨던 부분입니다. 잘 모르셔도 됩니다. 뒤에 공부하시다 보면 저절로 아시는 것도 있을 것이며 나중에 원하는 일을 하시다가 다시 아시게 되는 경우도 있을 겁니다. 그러나 기본이 없으면 오래가지 못합니다. 간단히 공부해 두시기 바랍니다.



자바에서 연산자는

산술연산자(Arithmetic Operator) --> 단항연산자(++,--), 이항연산자(+,-,*,/)

관계연산자(Relational Operator) -->>, >=, <, ><=, ==, != >

논리연산자(Logical Operator) -->&&, ||, &, |, !

비트연산자(Bitwise Operator) -->&, |, ^, ~, >>, >>>, <><

조건연산자(Conditional Operator) --> ?(삼항연산자)

할당연산자(Assignment Operator) --> +=, -=, *=, /=, &=, ^=, |=, <><=, >>=, >>>=

등으로 나누어 볼 수 있습니다.



연산자의 우선 순위는 괄호를 치시면 되니까 별다르게 고려 하지 않겠습니다.



1. ++, --, !, ~, instanceof

단항 연산자이다.
! : 논리형 자료형(boolean)의 부정
~ : 정수형 자료에 대한 보수 연산
++, -- : 단항 연산자, 변수의 앞쪽에 붙는 경우와 뒤쪽에 붙는 경우의 동작 형태가 다르다.
앞에 붙은 경우 : 연산이 수행된 다음 값
뒤에 붙는 경우 : 연산이 수행되기 전의 값



아래의 예제를 실습해 보세요~

[예제]

public class Op1 {
public static void main(String[] args) {
int a = 8;
//이진수 형태로 출력 합니다.(0이 아닌것 부터 출력)
System.out.println(Integer.toBinaryString(a));
a= ~a; //보수 연산, 1은0으로 0은 1로
System.out.println(Integer.toBinaryString(a));

a = 8;
a = a++;
System.out.println("a = " +a);

a = a++ +1;
System.out.println("a++ +1 = " +a);

}
}




[결과]

1000(앞 부분에 있는 0000~ 은 출력하지 않는다...)
11111111111111111111111111110111
a = 8
a++ +1 = 9



2. <><, >>, >>>

비트연산에 관련된 연산자(Shift 연산자) 입니다.
<>< 연산자는 좌측 쉬프트 이므로 2를 곱하는 효과가 있습니다.
>> 연산자는 우측 쉬프트 이므로 2로 나누는 효과가 있습니다.
<><, >> 연산자인 경우 부호를 고려 한다는것을 명심하세요~
당연히 부호를 고려하므로 왼쪽을 해당 부호 비트로 채웁니다.

>>> 연산자인 경우 왼쪽을 0으로 채웁니다. 부호를 고려하지 않습니다.
양수인 경우 >>, >>> 연산자는 같은 효과 이지만 음수인 경우 다른 결과가 나타 납니다.

[예제]

public class ShiftTest {
public static void main(String[] args) {
int a=-64;
System.out.println("<><");
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(a<><1));
System.out.println(Integer.toBinaryString(a<><2));
System.out.println(">>");
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(a>>1));
System.out.println(Integer.toBinaryString(a>>2));
System.out.println(">>>");
System.out.println(Integer.toBinaryString(a));
System.out.println(Integer.toBinaryString(a>>>1));
System.out.println(Integer.toBinaryString(a>>>2));
}
}



[결과]

<><
11111111111111111111111111000000
11111111111111111111111110000000
11111111111111111111111100000000
>>
11111111111111111111111111000000
11111111111111111111111111100000
11111111111111111111111111110000
>>>
11111111111111111111111111000000
1111111111111111111111111100000
111111111111111111111111110000



3.<, >, >=, <=, ==, !=

관계 연산자들 이며 연산의 결과로 boolean 값을 리턴 합니다.
이 연산자의 대상은 기본형 데이터에 한정되며 객체에 대해서는 쓰이지 못 합니다.
예)System.out.println(5 > 7);
==, != 또한 관계 연산자 이나 위의 것 보다 우선 순위가 낮다. 연산자의 두 항이 같은지 다른지에 따라 boolean 값을 돌려 줍니다.
==, != 연산자는 객체에 대해 사용이 가능한데 그 기준은 객체가 같은 메모리 영역에 있는지 아닌지로서 평가 합니다.



4.&, ^, |, &&, ||

& : 비트 AND
^ : 비트 XOR
| : 비트 OR
&& : ‘&’와 같이 AND 연산을 하지만 대상은 boolean
|| : ‘|’와 같이 OR 연산을 하지만 대상은 boolean



5. ?

조건연산자 이며 형식은 아래와 같습니다.
형식 : (조건) ? (참 일때의 식) : (거짓 일때의 식)
if 문등을 몇줄에 걸쳐 써야 하는것을 간략하게 기술 할 수 있도록 해 줍니다.
[예]
int i=2;
int result = i<5 ? i+10 : i/2; >
System.out.println(result);



6. =, op=

할당 연산자 이며 우선 순위가 가장 낮습니다.
Op= 연산자는 다음과 같은 것들이 있습니다.
+=, -=, *=, /=, &=, ^=, |=, <><=, >>=, >>>=

댓글 없음:

댓글 쓰기