JAVA 2011. 6. 9. 00:51
어제에 이어서 자바의 연산자에 대하여 계속 한다.

논리 연산자 & | ^ !

앞에서 배운 수치 비교 연산자와 동등 연산자는 모두 두 값을 비교한 결과를 boolean 값으로

산출한다. 그런데 때로는 이런 결과들을 조합하여 좀더 복잡한 논리식을 만들어야 할

경우도 있는데 그 때 사용하는 연산자가 논리 연산자이다.

피연산자1 & 피연산자2               >  1과 2가 모두 같으면 true, 그렇지 않으면 false이다.
피연산자1 | 피연산자2               >  1과 2가 모두 false면 false, 그렇지 않으면 true이다.
피연산자1 ^ 피연산자2               >  하나가 true, 하나가 false면 true, 그렇지 않으면 false이다.
!피연산자1                               >  값이 true이면 false, false이면 true.

복잡하고 헷갈린다,, 

조건 AND / OR 연산자 && ||

&&, || 는 위에서 배웠던 것과 같은 연산을 수행한다.

피연산자1 && 피연산자2            >   두 값이 모두 true면 true, 그렇지 않으면 false이다.
피연산자1 || 피연산자2            >   두 값이 모두 false면 false, 그렇지 않으면 true이다.


보면 위 &, | 와 다를게 없어 보인다, 하지만 차이점이있는데 보자

우선  ( 1 > 2 )  &  ( 3 < 4 ) 라면 어떤 방식으로 계산할까?

컴퓨터는 우선 양쪽 피연산자를 먼저 계산한다. ( 1>2)를 계산하여 false를 얻고

(3<4) 를 계산하여 true를 얻는다 ,그러고 최종적으로 false를 얻는다.

하지만 사람이 푼다면 처음에 (1>2) 를 보고 ' 아 false네 뒤엣건 보나마나 아차피

false겠구나' 하고 바로 결과에 도달한다. 바로 이런게 && , || 이다 .

얘네는 사람처럼 앞에만 계산하고 결과를 얻을 수 있다.

조건연산자 ? :

if 문이 조건에 따라 다른 명령을 실행하는 조건문이라면 ? : 이것은 조건에 따라 

다른식을 계산 하는 조건 연산자이다. 형식을 보자

조건식 ? 식1 : 식2           > 조건식이 true이면 식1을 계산하고 그렇지않으면 식2 를 계산한다

예 ) a < b ? a + 1 : b * 2 이런식이다, 

비트 연산자 & | ^ ~

&, |, ^, ~ 는 데이터가 표현하는 값이 아니라 데이터를 구성하는 비트 자체를 가지고

AND, OR, XOR, NOT 연산을 수행하는 연산자이다.

피연산자1  &  피연산자2           >   두 데이터의 같은 위치 비트들을 AND 연산한다.
피연산자1  |  피연산자2           >   두 데이터의 같은 위치 비트들을 OR 연산한다.
피연산자1  ^  피연산자2           >   두 데이터의 같은 위치 비트들을 XOR 연산한다.
~피연산자1                             >   데이터의 각 위치 비트들을 NOT 연산한다.


정보처리 딸 때 공부했던 기억이.... 했던 기억만...-_-

쉬프트 연산자 <<    >>    >>>

정수 << 비트수       >    정수를 구성하는 비트를 주어진 비트수만큼 왼쪽으로 이동하고 
                                  빈 공간은 0 으로 채움
정수 >> 비트수       >    정수를 구성하는 비트를 주어진 비트수만큼 오른쪽으로 이동하고 
                                  빈 공간은 MSB와같은 비트로 채움
정수  >>>  비트수   >    정수를 구성하는 비트를 주어진 비트수만큼 오른으로 이동하고 
                                  빈 공간은 0 으로 채움


음,, 이것도 본기억이 .. 밀리고 0 채우고 이런거.. 많이 봤는데 -ㅅ-

캐스트 연산자

캐스트 연산자는 타입의 변환을 전문적으로 수행하는 연산자이다. 

(타입) 피연산자      >   피연산자의 값을 타입으로 변환한다.

(int)num , (byte)12.5 등등..

캐스트 연산자는 피연산자를 변환시키는 것이 아니라 새로운 타입으로 값을 만들어 내는것이다.

int num1 = 3;
double num2 = (double)num1; 

위를 보면 num1을 바꾸는 것 처럼 보여도 결과적으로 num2를 만들어 내는 것이다. 

값이 옮겨 간 것일 뿐..

자바 연산자에는 우선순위가 있다. 수학 처럼 .. 물론 낮은 수준의 수학-_-.. 그 수학처럼 

사칙연산만 정도의 갯수만 나온다면 구분을 하지만 자바처럼 많은 연산이 동시에 수행되려면

정해진 순서가 필요했고 아래와 같다.



이 순서로 진행된다. 

안드로이드 하면서 몰랐던 연산도 많이 봤다. 갈길이 멀다 

 





출판사 : 한빛미디어 , 저자 : 김윤명 님의 뇌를 자극하는 Java프로그래밍에서 공부한 내용입니다. 
posted by 젊은쎄오
: