[actionscript]비트연산자

developer/Action script | 2009/12/30 17:04 | 무례한 좀

연산자 중에 대부분은 알겠지만 특히 비트 연산자가 좀 까다롭긴 하다.

우선 비트라 하면 “on”/”off”, 즉 1 혹은 0의 값을 가지는데 모든 숫자와 문자를 2진 코드화 한 숫자라 하겠다.

2진법은 다들 초등교육 때 다들 알 것이라 본다.

 

2진법(비트) 10진법
0 0
1 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8
1001 9
1010 10
...

즉 비트 연산자는 우리가 일반적으로 쓰는 10진법을 2진법으로 코드화하여 계산하면 되는 것이다.

 

비트 연산자의 종류
<< 좌측 이동
>> 기호 있는 우측 이동
>>> 기호 없는 우측 이동
& 비트의 AND 합
^ 비트의 XOR 합
| 비트의 OR 합

대부분의 교재가 이런 식으로 나와 있는데 예를 들어 보겠습니다.

 

비트 이동 연산

 

숫자 14(2진수—> 1110)를 가지고 위의 3개의 비트 이동 연산자를 써 보겠다.

14<<2  : 결과값 ---- 56(2진수-->111000)

왼쪽으로 비트가 2칸 증가하면서 자연 뒷 부분엔 00이 추가 되었다. 위의 2진 코드(111000)을 10진수로 변환하면 56이 나옴.

 

14>>2 : 결과값 ---- 3(2진수-->11)

오른쪽으로 비트가 2칸 감소하면서 자연 뒷 부분(10)은 짤렸다. 10진수로 변환하면 해당 값이 나옴. (양수의 비트 연산자는 0이하의 값은 안 나온다.)

 

tip.

소수점의 숫자에 대한 비트 연산자는 소숫점 이하는 버림하고 일반 정수와 동일한 값이 나오게 됩니다. 그리고 1.0이하의 숫자(음수 제외) 비트 연산자의 결과값은 항상 0이 될 수 밖에 없겠지요.(소수점의 2진법 표기에 대한 선 지식을 수행하길 바란다.)

또한 음수에 대한 비트 연산이 있다. 음수에 대한 것은 – 기호만 앞에 부쳐 주고 연산은 양수와 동일하다. 단 -1이 최대값이 된다.(더 이상 올라갈 수가 없다.)

 

14>>>2: 결과값 --- 3

위와 마찬 가지로 양수이면 동일한 결과값을 얻을 수 있다.

 

tip.

만약 음수에 대한 unsigned right shift(부호 없는 비트 연산)를 쓰게 된다면 어떤 일이 발생할까?

여기엔 음수 영역에 대한 보수의 개념이 들어간다.

음수에 이 비트 연산을 쓰게 된다면 보수로 전환이 되고 그때부터 오른쪽으로 밀려나간다고 생각하면 되고 밀려나간 왼쪽 비트 단위엔 0 값이 된다는 것이다.

 

아래 그림에는 그림에는 –1,-5,-10을 돌려보았다.

 

 

 

아래 2개의 그림은 위의 과정 참조 사항이다.

2의 n승에 대한 차트

각 –1,-5,-10에 대한 >>>n 연산 결과 값

(data type은 int(32bit)를 바탕으로 산출)

 

 

위의 해당 결과 값에 대한 코드 처리 부분

 

//각 숫자에 대한 ">>>" 연산 결과값 산술 처리 
var num:int=-10; 
for(var i:Number=0;i<33;i++)    trace(num>>>i); 

// 2의 N승 산술 처리 var totalNum:Number=1; for(var i:Number=32;i>0;i--)    trace(totalNum=totalNum*2);

// 2의 N승 검별 처리 var num:Number=16; for(var i:Number=1;i<1000;i++){     trace("[process]: "+num);     num=num/2;     if(num==1){         trace("2의 "+i+"승");         return;     }else if(num<1){         trace("2의 배수가 아님"+"[2의 "+(i-1)+"승 이상]");         return;     } }

 

 

비트 논리 결합 연산

 

숫자 14(2진수-->1110)과 7(111)을 가지고 아래의 3개의 비트 결합 연산자를 보겠다.

14&7 : 결과값 ---- 6(2진수-->110)

1110

& 111        1&1 –>1 , 0&0 –>1, 0&1 –>0, 0&0->0을 연산, 즉 비트가 서로 같으면 true.

-----

0110    --> 맨 앞의 0을 제외하고 110 즉 10진법 숫자 6을 가리킨다.

 

14|7: 결과값 ---- 15(2진수-->1111)

1110

| 111         0|0 –>0을 제외하고 비트 값이 1이 들어있으면 true.

-----

1111   

 

14^7: 결과값 ---- 9(2진수-->1001)

1110

^ 111        1^1->0, 0^0->0을 제외하고 둘의 비트가 틀려야 true.

-----

1001

 

더욱 자세한 내용은 아래 사이트에서 참조하길 바란다.

http://www.moock.org/asdg/technotes/bitwise/

http://www.elitecoders.de/mags/cscene/CS9/CS9-02.html

Share/Bookmark

태그 : actionscript
이전 1 ... 5 6 7 8 9 10 11 12 13 ... 70 다음