2013년 8월 5일 월요일

[2주차 2일] 연산자

산술 연산자

+, +, *, /, %
같은형의 변수끼리만 연산이 가능하고 결과도 같은 형으로 나오게 된다.

ex1> int a = 10, int b = 20;
        int result  = a + b; 

ex2> int a = 5, int b = 2;
        float result = a /b;

위의 ex2의 결과는 2.0이 나온다 int형끼리의 연산 결과는 int형이기 때문에 2.5가 나오지 않고 2.0이 나오게 된것이다. 한가지 의문점이 생기는것이 연산결과의 int형인2가 어떻게 float형인 2.0으로 들어갔는지에 대한 의문점이 생기는데 이것은 java내부적으로 자동형변환을 해주기 때문이다.
그렇다면 우리가 원하는 2.5의 결과를 얻기 위해서는 ex3과 같이 명시적인 형변환을 해줘야 한다.

ex3> int a = 5, int b = 2;
        float result = (float) a / b;




형변환

- 암시적 형변환(implicit type conversion)
: 내부적으로 자동으로 형변환이 이루어 지는것
short > int > long > float > double  순으로 형변환이 진행된다.

- 명시적 형변환((explicit type conversion)
: 프로그래머에 의해서 형변환이 이루어 지는것

ex>  int a = 4, int b = 2;
        float result = a /b;
위의 결과가 2.0이 나오는것은 연산결과의 int가 float으로 암시적 형변환을 한 결과 이다.

ex> float f = (float) 10;
위에서 처럼 명시적으로 형변환을 해줄수 있다.




단항연산자

우리가 헤깔리기 쉬운부분이 바로 Pre-fix연산자와 Post-fix연산자 이다.
즉, ++, -- 등을 다룰때 헤깔리기 쉽다는 것이다.

ex1> int a = 10;
        int s = ++a;    //전위연산자
        결과 a: 11, s: 11
ex2> int a = 10;
        int s = a++;    //후위연산자
        결과 a: 11, s: 10
위의 예제에서 보면 s의 값이 다른 것을 알수 있다. 
ex1에서는 a = a + 1 이 수행되고 s = a가 수행되는 반면 
ex2는 s = a가 수행되고 a = a + 1 이 수행되기 때문에 s의 결과가 다르게 나오는 것이다.

*할당할때 값을 할당하는것이지 변수 자체를 할당하는게 아니라는 것을 명심하자!!




관계연산자

>, >=, <, <=, ==, !=
관계 연산자의 결과 값은 boolean type이다. 




논리연산자

 - AND : Operand 둘다 true 일때만 연산 결과가 true 가 됨.
a && b (만약 a가 false 이면 b는 따져보지도 않고 결과값 false를 내 놓는다)
a & b (a 가 false 일지라도, b 까지 따져보고 결과를 내 놓는다)
 - OR : 두개의 Operand중 하나라도 true이면 결과는 true가 된다)
        a || b (a 가 true이면 b는 따져 보지도 않고 결과값 true를 내 놓는다)
        a | b (a 가 true일지라도 b 까지 따져보고 결과를 내 놓는다)
 - NOT : Operand가 true이면 false, false이면 true가 된다.
 !a (a 의 값이  true -> false 바뀌고, false -> true)



비트연산자

>>, >>>, <<, &, |, ^, ~

>><< 연산자: 왼쪽또는 오른쪽으로 비트를 옮기고, 빈자리는 부호비트로 채워진다.
ex>
 int i = 11;
 int s >> 2;
 i의 2진수 표현 : 0000 0000 0000 0000 0000 0000 0000 1011
               결과 : 00------------------------------00 0010(11 : 짤림)
 int i = -11;
 int s >> 2;
 i의 2진수 표현 : 1111 1111 1111 1111 1111 1111 1111 0101    (-11)
               결과 : 11------------------------------11 1101(01: 짤림)


>>> 연산자: 왼쪽으로 비트를 옮기고, 빈자리는 0 으로 채워진다.
ex>
 int i = 11;
 int s >>> 2;
 i의 2진수 표현 : 0000 0000 0000 0000 0000 0000 0000 1011
               결과 :00------------------------------00 0010(11 : 짤림)

 int i = -11;
 int s >>> 2;
 i의 2진수 표현 : 1111 1111 1111 1111 1111 1111 1111 0101(-11)
               결과 : 00------------------------------11 1101(01: 짤림)


& 연산자: 두 bit 모두 1일때만 1이된다.
ex>
 int i = 10, i2 = 11;
 int s = i & i2;
 0000 1010 (10)
& 0000 1011 (11)
------------------
 0000 1010 (10)


^ 연산자: 두 bit의 값이 같지 않을 때만 1이된다.
ex>
 int i = 10, i2 = 11;
 int s = i ^ i2;
 0000 1010 (10)
^ 0000 1011 (11)
------------------
 0000 0001 (1)

~ 연산자: bit 값이 1인경우 0으로, 0인경우 1로 된다.
 int i = 10;
 int s = ~i;
~  0000 1010
         -------------
     1111 0101



조건 연산자(Conditional Operator)

형식: 식 ? Operand_1 : Operand_2
  식 : true 또는 false 값을 갖는다.
  식이 참이면, 결과값 Operand_1
  식이 거짓이면, 결과값 Operand_2
ex> 
 int 정수1 = 10;
 int 정수2 = 20;
 int 최대값 = 정수1 > 정수2 ? 정수1 : 정수2;



배정연산자

: 값을 변수에 할당할 때 쓰는 연산자.
=, -=, /=, %=, &=, |=, ^=, >>=, >>>=, <<=

댓글 없음:

댓글 쓰기