문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 C언어/문법 (문단 편집) === 비트 연산자 === 말그대로 비트 연산자들로, AND OR XOR NOT 등이 있다. 이 연산자들 자체에 대해선 [[논리 연산]]으로. * {{{&}}}: AND * {{{|}}}: OR * {{{^}}}: XOR * {{{~}}}: NOT * {{{>>}}}: 비트를 오른쪽으로 이동 * {{{<<}}}: 비트를 왼쪽으로 이동 참고로 여기다가 옆에 {{{=}}}를 붙이면 어떤 연산을하고 원래 값에 대입하라는 뜻. 예를 들어서 {{{x >>= 2}}}는 {{{x = x >> 2}}}와 같다. {{{int}}}변수를 생성할때 값을 2진수로 쓰고 싶다면 앞에 {{{0b}}}를 붙이면 된다. 예를 들면 {{{int n = 5}}}는 {{{int n = 0b101}}}과 같다. 사용 예시 1: 값이 짝수인지 홀수인지 구별해서 출력해주는 함수 {{{#!folding [펼치기] {{{#!syntax cpp #include void oddOrEven(int n){ if (n & 1){ printf("홀수\n"); } else { printf("짝수\n"); } } }}} }}} 사용 예시 2: 정수를 2진수 (32비트)로 바꿔서 출력하는 함수 {{{#!folding [펼치기] {{{#!syntax cpp #include void printBit(int n){ for (int i = 1 << 7; i >= 1; i >>= 1){ if (n & i){ printf("1"); } else { printf("0"); } } printf("\n"); } }}} }}} 사용 예시 3: {{{if}}}문 없이 최솟값/최댓값 반환하기[*참고 a ^ (b ^ a) == (a ^ b) ^ a == b][*참고2 a ^ b == b ^ a] {{{#!folding [펼치기] 최솟값 {{{#!syntax cpp int min(int a, int b){ return b ^ ((a ^ b) & -(a < b)); } }}} 최댓값 {{{#!syntax cpp int max(int a, int b){ return a ^ ((a ^ b) & -(a < b)); } }}} }}} 비트를 열거형으로써 사용할 수도 있는데, 이것들을 비트 연산자들로 조작이 가능하다. 예를 들어서 어떤 프로그램을 만드는데 파랑, 초록, 노랑, 빨간 불빛이 나오는걸 컨트롤 하고싶다고 치자. 어떤 불이 켜져있는지의 상태를 플래깅 하기 위해서는 1개의 정수면 충분하다. {{{#!syntax cpp enum Lights { GREEN = 1 << 0, //0b1 YELLOW = 1 << 1, //0b10 RED = 1 << 2, //0b100 }; int main(void){ int flag = 0; //모두 꺼져있는 상태 flag |= (RED | GREEN); //빨간불과 초록불 켜기 flag &= ~(RED | GREEN); //빨간불과 초록불 끄기 flag = ~0; //모든 불 켜기 flag = 0; //모든 불 끄기 flag ^= RED; //빨간불의 상태를 바꾸기 flag = ~flag; //모든 불들의 상태를 바꾸기 if ((flag & (RED | GREEN)) == (RED | GREEN)){ //빨간불과 초록불이 동시에 켜져있는지 확인 } if (flag & (RED | GREEN)){ //빨간불과 초록불 둘 중 하나라도 켜져있는지 확인 } //...etc. }}} 보다시피 할 수 있는게 아주 많다. 숫자 1개로만 이것들을 다 할 수 있으니까 빠르고 메모리 효율도 좋다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기