비트 연산 


* 비트 개념

컴퓨터의 모든 정보는 0과 1 값만 가지는 2진수로 다루어지고 저장된다.

2진수의 한 자리수 = 비트

8개의 비트 = 바이트


* 비트 논리연산

a & b : 비트  AND 연산 : 두 비트 모두 1이면 1, 그렇지 않으면 0

a | b : 비트 OR 연산 : 두 비트 모두 0이면 0, 그렇지 않으면 1

a ^ b : 비트 XOR 연산 : 두 비트가 다르면 1, 같으면 0

~a : 비트 NOT 연산 : 1을 0으로, 0을 1로 변환


* 비트 시프트 연산

새로운 비트를 삽입/삭제하면서 비트의 자리를 이동하는 연산.(삽입/삭제 : 왼쪽/오른쪽)

오른쪽 시프트(>>)는 한번 할 때마다 2로 나누는효과

왼쪽 시프트(<<)는 한번 할 때마다 2를 곱하는 효과


ex)

10진수 : 3 -> 6 -> 12

2진수 : 11 -> 110 -> 1100


b = a << 1; // a의 비트들을 왼쪽으로 1비트 이동시킨 결과를 b에 저장. a 값 변경 없음

b = a >> 2; // a의 비트들을 오른쪽으로 2비트 이동시킨 결과를 b에 저장. a값 변경 없음

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>비트 연산</title>
<script>
function digit8(v) { // 숫자 v를 8비트 2진수로 변환
    var str="";
    for(i=0; i<8; i++, v<<=1) {
        if((v & 0x80)) str += "1";
        else str += "0";
    }
    return str;
}
</script>
</head>
<body>
<h3>비트 논리 연산과 시프트 연산</h3>
<hr>
<script>
    var x=10, y=3;
    document.write("<pre>");
    document.write("x=" + x + ", y=" + y + "<br>"); // x, y 값 출력
    document.write("x :         " + digit8(x) + "<br>"); // x 값 출력
    document.write("y :         " + digit8(y) + "<br>"); // y 값 출력
    document.write("<hr>");
    document.write("x & y  :     " + digit8(x&y) + "<br>");
    document.write("x | y  :     " + digit8(x|y) + "<br>");
    document.write("x ^ y  :     " + digit8(x^y) + "<br>")
    document.write("~x     :     " + digit8(~x) + "<br>");
    document.write("<hr>");
    document.write("x << 1 :     " + digit8(x<<1+ " (" + (x<<1+ ")<br>");
    document.write("x >> 1 :     " + digit8(x>>1+ " (" + (x>>1+ ")<br>");
    document.write("x >>> 1:     " + digit8(x>>>1+ " (" + (x>>>1+ ")");
    document.write("</pre>");
</script>
</body>
</html>
 
cs


 



'WEB > JAVASCRIPT-CONCEPT' 카테고리의 다른 글

예제 6-15. if-else 사용  (0) 2017.11.13
예제 6-14. 문자열 연산  (0) 2017.11.13
예제 6-12. 조건 연산  (0) 2017.11.13
예제 6-11. 논리 연산  (0) 2017.11.13
예제 6-10. 비교 연산  (0) 2017.11.13
Posted by 너래쟁이
: