'비트연산'에 해당되는 글 1건

  1. 2008.08.14 [아시나요?]조건연산 , 비트연산 , 시프트연산
2008. 8. 14. 16:30

[아시나요?]조건연산 , 비트연산 , 시프트연산

1.조건연산

 

조건 연산은 true나 false같은 논리적은 데이터 타입만 사용하여 AND 와 OR연산을 수행한다


조건연산자

 관계 연산자  의미
 A&&B  AND 연산, A와 B가 모두 true일 때만 결과가 true
 A||B  OR 연산, A와 B 둘 중 하나라도 true이면 결과는 true


연산의 효율성을 위해 A&&B연산에서 A가 false라면 결과는 당연히 false이기 때문에 B문장은 계산하지 않는다. 같은 이유로 A||B연산에서 A가 true라면 결과 또한 true라면 결과 또한 true이기 때문에 B문장을 계산하지 않는다. 조건연산자는 실제 프로그램에서 다음과 같이 사용할 수 있다.


boolean result;

int op1 = 30;

int op2 = 50;


result = true && false ;                      //result = false

result = true || false ;                       //result = true

result = (10<20)&&(10==10);                //result = true

result = (op1==op2) || (op1>==op2);       //result = false



2.비트연산

 

자바에서 비트 연산은 정수형 데이터 타입만 사용할 수 있다. 비트연산을 이용하면 정수형 데이터 타입을 비트 단위에서 제어 할 수 있다. 즉 데이터 처리의 단위가  int나 byte의 값이 아니라, 이들을 구성하고 있는 가 비트 단위로 연산을 수행할 수 있다. 비트 연산을 이해하기 위새서는 2진수와 16진수에 대한 약간의 지식을 필요로 한다. 여기서 그 방법을 자세히는 설명할수 없고 몇가지 진법변환의 예만 보이겠다.

 10진수  1  13  100  253
 2진수  0000 0001  0000 1101  0110 0100  1111 1101
 16진수  1x01  1x0D  0x64  0xFD


비트연산에 사용할 수 있는 비트 연산자는 다음과 같이 4가지 종류가 있다. 이들의 용어 정도는 한번쯤 들어보았을 것이다.

& (AND연산)  ,  | (OR연산)  ,  ^ (XOR연산)  ,  ~ (NOT연산)


 AND 연산 :  대응되는 비트의 조합이 모두 1일 때 결과가 1이다. 이것 이외에는 모두 0 이다 .

            10101010

AND        00001111

            00001010


AND 연산을 자바로 수행하는 방법은 다음과 같다.


int op1 = 0xAA;              //10101010

int op2 = 0x0F;              //00001111

int result = op1 & op2;    //00001010 >>>10진수의 10


 OR 연산 : 대응되는 비트중 하나라도 1이라면 결과는 1이다. 모두가 0일 때만 결과가 0 이다.

               00110011

OR            00001111

               00111111


OR 연산을 자바로 수행하는 방법은 다음과 같다.


int op1 = 0x33;              //00110011

int op2 = 0x0F;              //00001111

int result = op1 | op2;     //00111111 >>>>>10진수 63


 XOR 연산 : 대응되는 비트가 다르면 1, 같으면 0 이다. 즉 0-0이나 1-1과 같이 대응되는 비트가 같다면 결과는 0 이고 , 1-0 이나 0-1과 같이 대응되는 비트가 다르다면 결과는 1이다.

              11001100

XOR          11110000

              00111100


XOR 연산을 자바로 수행하는 방법은 다음과 같다.


int op1 = 0xCC;              //11001100

int op2 = 0xF0;              //11110000

int result = op1 ^ op2;     //00111100 >>>>>10진수 60  


 NOT 연산 : 0은 1로, 1은 0으로 반전시킨다.

               11001100

NOT         

               00110011


NOT 연산을 자바로 수행하는 방법은 다음과 같다.


int op1 = 0xCC;                //11001100

int result = 0xFF & (~op1);  //00110011


비트연산자를 사용하면 특정 비트의 값이 참인지 거짓인지( 0 또는 1 )를 쉽게 판단할 수 있다. 이러한 연산은 비트별로 어떤특정한 의미를 부여했을 경우 효과적으로 사용할 수 있다. 다음은 시스템 플래그(sysFlag)라는 정수현 변수의 각 비트에 시스템의 산황을 알 수 있는 특별한 의미를 부여했을 때의 결과이다.


이 시스템 플래그의 각 비트를 이용하면 원하는 시스템의 상황을 알 수 있다. 만일 시스템에 오류가 발생한 적이 있는지를 알아보기 위해서는 네 번째 비트의 값을 알면된다.

               boolean result = (sysFlag & 0x08) ==0x08;

result의 값이 true라면 에러가 발생한 적이 있고, false라면 발생한 적이 없다는 것이다. 그림으로는 현재 result가 true이다. 이와는 반대로 특정한 비트의 값을 설정할 수도 있는데. CPU 사용률을 정상이 아니게 설정 하는 방법이다

               sysFlag = sysFlag | 0x08;

OR연산은 대입연산자를 사용해 좀더 편리하게 나타낼 수 있다.

               sysFlag | =0x80;


3.시프트연산

비트연산에는 비트 전체를 왼쪽이나 오른쪽으로 이동할 수 있는 시프트 연산자를 제공한다. 10010(18)을 오른쪽으로 1만큼 시프트하면 남는 최상위 비트는 부호 비트로 채워지고 결과는 01001(9)이 된다. 시프트하고 난 후의 값은 처음의 1/2이다.

 


시프트 연산은 다음과 같이 3가지 연산자를 이용할 수 있다.

<<< : 이러한 연산자는 존재하지 않는다.

 >>  오른쪽으로 이동하면서 왼쪽의 빈 공간에는 부호 비트의 값을 채움
 <<  왼쪽으로 이동하면서 오른쪽의 빈 공간에 0 을 채움
 >>>  오른쪽으로 이동하면서 왼쪽의 빈 공간에 0 을 채움

'My work space > Java' 카테고리의 다른 글

[아시나요?]객체 지향 언어1  (0) 2008.08.14
[아시나요?]배열  (0) 2008.08.14
[아시나요?]이스케이프 문자  (0) 2008.08.14
[아시나요?]데이터 타입  (0) 2008.08.14
[아시나요?]메소드  (0) 2008.08.14