최신판 |
당신의 편집 |
5번째 줄: |
5번째 줄: |
| | | |
| == 특징 == | | == 특징 == |
− | === 논리 연산자 === | + | === 논리 연산자 === |
− | <ref name="비트연산자종류">〈[https://rockykim5581.tistory.com/19 비트 연산자의 종류]〉, 《김로키》</ref>
| |
| :{|class=wikitable width=1000 style="background-color:#ffffee" | | :{|class=wikitable width=1000 style="background-color:#ffffee" |
| |+비트 연산자 | | |+비트 연산자 |
28번째 줄: |
27번째 줄: |
| |} | | |} |
| | | |
− | | + | ==== AND 연산자 ==== |
| 논리 연산자는 (&,│,^,~)로 이루어져 있으며 비트 논리 연산자는 그 대상이 boolean타입일 경우에는 일반 논리 연산자로 활용되지만 대상이 정수형일 경우에는 위의 표와 같이 비트 논리연산자로 활용한다. 비트 연산은 두 값을 비트 단위로 나열한 뒤 각 자릿수를 비트 연산자로 연산한다. 각 자릿수의 연산은 독립적이며 다른 자릿수에 영향을 주지 않는다. <ref name="논리연산자">〈[https://coding-factory.tistory.com/521 논리 연산자의 종류]〉, 《코딩 팩토리》</ref> | | 논리 연산자는 (&,│,^,~)로 이루어져 있으며 비트 논리 연산자는 그 대상이 boolean타입일 경우에는 일반 논리 연산자로 활용되지만 대상이 정수형일 경우에는 위의 표와 같이 비트 논리연산자로 활용한다. 비트 연산은 두 값을 비트 단위로 나열한 뒤 각 자릿수를 비트 연산자로 연산한다. 각 자릿수의 연산은 독립적이며 다른 자릿수에 영향을 주지 않는다. <ref name="논리연산자">〈[https://coding-factory.tistory.com/521 논리 연산자의 종류]〉, 《코딩 팩토리》</ref> |
| | | |
| + | [[파일:And 연산자.PNG|400픽셀|섬네일|AND 연산자 예시]] |
| | | |
− | | + | '''&(AND연산)''' |
− | ==== AND 연산자 ====
| |
− | [[파일:And 연산자.PNG|350픽셀|섬네일|오른쪽|AND 연산자 예시]]
| |
− | | |
− | '''& (AND연산)''' | |
| | | |
| :{|class=wikitable width=300 style="background-color:#ffffee" | | :{|class=wikitable width=300 style="background-color:#ffffee" |
59번째 줄: |
55번째 줄: |
| |} | | |} |
| | | |
− | & 연산(논리곱)은 2진수로 표현된 2개의 피연산자를 AND연산 하여 결과를 나타낸다. <br> AND 연산자는 2진수로 표현된 두 비트가 모두 1일 때만 1을 반환하며, 다른 경우는 모두 0을 반환한다.<ref name="논리연산자"></ref> | + | &연산(논리곱)은 2진수로 표현된 2개의 피연산자를 AND연산 하여 결과를 나타냅니다. <br> 2진수로 표현된 두 비트가 모두 1일 경우에만 연산결과가 1로 표현됩니다. |
− | | + | <ref name="논리연산자"></ref> |
− | | |
− | | |
− | | |
| | | |
| ==== OR 연산자 ==== | | ==== OR 연산자 ==== |
− | [[파일:Or 연산자.PNG|350픽셀|섬네일|오른쪽|OR 연산자 예시]] | + | [[파일:Or 연산자.PNG|400픽셀|섬네일|OR 연산자 예시]] |
− | | + | '''│(OR연산)''' |
− | '''│ (OR연산)''' | |
− | :{|class=wikitable width=300 style="background-color:#ffffee"
| |
− | |+
| |
− | !align=center colspan="2" style="background-color:#ffee88"|OR 연산 결과
| |
− | |-
| |
− | |align=center style="background-color:#ffeecc"|입력값
| |
− | |align=center style="background-color:#ffeecc"|반환값
| |
− | |-
| |
− | |align=center|0, 0
| |
− | |align=center|0
| |
− | |-
| |
− | |align=center|0, 1
| |
− | |align=center|1
| |
− | |-
| |
− | |align=center|1, 0
| |
− | |align=center|1
| |
− | |-
| |
− | |align=center|1, 1
| |
− | |align=center|1
| |
− | |-
| |
− | |}
| |
− | | |
− | | 연산(논리합)은 2진수로 표현된 2개의 피연산자를 OR연산 하여 결과를 나타낸다. <br> OR 연산자는 대응되는 두 비트 중 하나라도 1이면 1을 반환하며, 두 비트가 모두 0일 때만 0을 반환한다. <ref name="논리연산자"></ref>
| |
− | | |
− | | |
− | | |
− | | |
− | | |
− | | |
− | ==== XOR 연산자 ====
| |
− | [[파일:XOR 연산자.PNG|350픽셀|섬네일|오른쪽|XOR 연산자 예시]]
| |
| | | |
− | ''' ^ (XOR연산)'''
| + | === 이동 연산자 === |
− | :{|class=wikitable width=300 style="background-color:#ffffee"
| |
− | |+
| |
− | !align=center colspan="2" style="background-color:#ffee88"|OR 연산 결과
| |
− | |-
| |
− | |align=center style="background-color:#ffeecc"|입력값
| |
− | |align=center style="background-color:#ffeecc"|반환값
| |
− | |-
| |
− | |align=center|0, 0
| |
− | |align=center|0
| |
− | |-
| |
− | |align=center|0, 1
| |
− | |align=center|1
| |
− | |-
| |
− | |align=center|1, 0
| |
− | |align=center|1
| |
− | |-
| |
− | |align=center|1, 1
| |
− | |align=center|0
| |
− | |-
| |
− | |}
| |
− | | |
− | ^ 연산(배타적 논리합)은 2진수로 표현된 2개의 피연산자를 XOR연산 하여 결과를 나타낸다. <br> XOR 연산자는 대응되는 두 비트가 서로 다르면 1을 반환하고, 서로 같으면 0을 반환한다. <ref name="논리연산자"></ref>
| |
− | | |
− | | |
− | | |
− | | |
− | | |
− | ==== NOT 연산자 ====
| |
− | [[파일:NOT 연산자.PNG|350픽셀|섬네일|오른쪽|NOT 연산자 예시]]
| |
− | | |
− | ''' ~ (NOT연산)'''
| |
− | :{|class=wikitable width=300 style="background-color:#ffffee"
| |
− | |+
| |
− | !align=center colspan="2" style="background-color:#ffee88"|NOT 연산 결과
| |
− | |-
| |
− | |align=center style="background-color:#ffeecc"|입력값
| |
− | |align=center style="background-color:#ffeecc"|반환값
| |
− | |-
| |
− | |-
| |
− | |align=center|0
| |
− | |align=center|1
| |
− | |-
| |
− | |align=center|1
| |
− | |align=center|0
| |
− | |-
| |
− | |}
| |
− | | |
− | ^연산(배타적 논리합)은 2진수로 표현된 2개의 피연산자를 XOR연산 하여 결과를 나타낸다. <br> XOR 연산자는 대응되는 두 비트가 서로 다르면 1을 반환하고, 서로 같으면 0을 반환한다. <ref name="논리연산자"></ref>
| |
− | | |
− | | |
− | | |
− | | |
− | | |
− | (예제)
| |
− | System.out.println(" 15 & 25 = " + (15 % 25));
| |
− | System.out.println(" 15 | 25 = " + (15 | 25));
| |
− | System.out.println(" 15 ^ 25 = " + (15 ^ 25));
| |
− | System.out.println(" ~25 = " + (~25)); <br>
| |
− | 15 & 25 = 9
| |
− | 15 | 25 = 31
| |
− | 15 ^ 25 = 22
| |
− | ~25 = -26
| |
− | | |
− | | |
− | | |
− | === 이동 연산자 === | |
− | <ref name="비트연산자종류"></ref>
| |
| :{|class=wikitable width=1000 style="background-color:#ffffee" | | :{|class=wikitable width=1000 style="background-color:#ffffee" |
| |+비트 연산자 | | |+비트 연산자 |
182번째 줄: |
77번째 줄: |
| |- | | |- |
| |align=center|>>> | | |align=center|>>> |
− | |align=center|(자바에만 존재)비트 값을 주어진 숫자 만큼 오른쪽으로 이동 시킨 후 빈공간을 모두 0으로 채운다 | + | |align=center|(자바에만 존재)비트 값을 주어진 숫자 만큼 오른쪽으로 이동 시킨 후 빈공간을 모두 0으로 채운다(left shift 연산) |
| |} | | |} |
− |
| |
− |
| |
− | ==== Left Shift 연산자 ====
| |
− | ''' << (left shift 연산)'''
| |
− |
| |
− | << 연산자는 두개의 피연산자를 요구하며 다음의 의미를 가진다.<br>
| |
− | num 비트를 왼쪽으로 1칸씩 이동시킬 때마다 정수의 값은 2배가 된다.<br>
| |
− | num 비트를 오른쪽으로 1칸씩 이동시킬 때마다 정수의 값은 2로 나누어진다.<ref name="이동연산자">〈[http://donologue.tistory.com/55 이동 연산자의 종류]〉, 《구운밤》</ref>
| |
− |
| |
− | << 연산결과
| |
− | int num1 = 3
| |
− | num1 << 2; // num1 의 결과 값 3의 비트열을 2칸 왼쪽으로 이동한다. //
| |
− | <br> num1 = 0000 0011
| |
− | num1 = 0000 1100 // num1 의 결과 값이 3에서 12로 변한다.//
| |
− |
| |
− | ==== Right Shift 연산자 ====
| |
− | ''' >> (right shift 연산)'''
| |
− |
| |
− | >> 연산자는 두개의 피연산자를 요구하며 다음의 의미를 가진다.<br>
| |
− | num1 >> num2 : num1의 비트 열을 num2칸씩 오른쪽으로 이동시킨 결과를 반환한다.<br> <ref name="이동연산자"></ref>
| |
− |
| |
− | >> 연산결과
| |
− | int num1 = 9
| |
− | num1 >> 2; // num1 의 결과 값 9의 비트열을 2칸 오른쪽으로 이동한다. //
| |
− | <br> num1 = 0000 1001
| |
− | num1 = 0000 0010 // num1 의 결과 값이 9에서 2로 변한다.//
| |
− |
| |
− | ''' >>> (right shift 연산)'''
| |
− |
| |
− | >>> 연산은 오직 자바에만 있는 연산이며 >> 연산과 기본원리는 같다. 연산자에서 중요하게 볼 부분은 음수의 이동이다. >> 연산자일때 양수의 이동일 경우 자동으로 0이 채워지지만 음수일 경우에는 0을 채우는 경우와 1을 채우는 경우로 나뉘어진다.<br> 하지만 >>> 연산자는 맨 왼쪽에서 최상위 부호비트와 관계없이 무조건 0으로 채워지기 때문에 결과값은 무조건 양수로만 나타나게 된다.<ref name="이동연산자"></ref>
| |
− |
| |
− | >>> 연산결과
| |
− | int num1 = 9
| |
− | num1 >>> 2; // num1 의 결과 값 9의 비트열을 2칸 오른쪽으로 이동한다. //
| |
− | <br> num1 = 0000 1001
| |
− | num1 = 0000 0010 // 양수일때는 >> 연산과 결과값이 같게 나온다.// <br>
| |
− | int num1 = -9;
| |
− | num1 = num1 >>> 2;
| |
− | 1073741821 // 음수일경우 이상한 값이 나온다. 그 이유는 빈자리를 0으로 채우기 때문이다.// <br>
| |
− | int num1 = 0;
| |
− | num1 = num1 >>> 2;
| |
− | -3 // 따라서 음수일 때는 -부호를 붙여 사용하면 된다.
| |
| | | |
| {{각주}} | | {{각주}} |
231번째 줄: |
84번째 줄: |
| == 참고자료 == | | == 참고자료 == |
| * 비트 연산자, 〈[http://tcpschool.com/c/c_operator_bitwise 비트 연산자]〉, 《TCP SCHOOL》 | | * 비트 연산자, 〈[http://tcpschool.com/c/c_operator_bitwise 비트 연산자]〉, 《TCP SCHOOL》 |
− | * 비트 연산자의 종류,〈[https://rockykim5581.tistory.com/19 비트 연산자의 종류]〉, 《김로키》, 2015-11-22
| |
| * 논리 연산자, 〈[https://coding-factory.tistory.com/521 논리 연산자]〉, 《코딩팩토리》, 2020-04-19 | | * 논리 연산자, 〈[https://coding-factory.tistory.com/521 논리 연산자]〉, 《코딩팩토리》, 2020-04-19 |
− | * 이동 연산자, 〈[https://donologue.tistory.com/55 이동 연산자]〉, 《구운밤》, 2016-07-10
| |
| | | |
| == 같이 보기 == | | == 같이 보기 == |