'비트연산'에 해당되는 글 1건
- 2008.08.14 [아시나요?]조건연산 , 비트연산 , 시프트연산
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 |