Loading the catalog…
Loading the catalog…
오늘은 비트연산자 & 연산자 개념과 우선순위 정리를 해볼 예정이다. 1. 10진수 → 2진수 변환법 10진수를 2로 계속 나누면서, 나온 나머지를 아래에서 위로 읽으면 2진수가 된다. 예: 13을 2진수로 변환 13 ÷ 2 = 6 ... 나머지 1 6 ÷ 2 = 3 ... 나머지 0 3 ÷ 2 = 1 ... 나머지 1 1 ÷ 2 = 0 ... 나머지 1 나머지를 아래→위로 읽기: 1101 → 13 = 1101(2) 검산: 1101 = 1×8 + 1×4 + 0×2 + 1×1 = 13 ✅ 2. 비트연산자 종류 & (AND) : 두 비트 모두 1이면 1 | (OR) : 둘 중 하나라도 1이면 1 ^ (XOR) : 두 비트가 다르면 1 ~ (NOT) : 비트를 전부 반전 << (왼쪽 시프트) : 비트를 왼쪽으로 민다 >> (오른쪽 시프트) : 비트를 오른쪽으로 민다 & | ^ 결과 비교 a=0, b=0 → a&b=0 a|b=0 a^b=0 a=0, b=1 → a&b=0 a|b=1 a^b=1 a=1, b=0 → a&b=0 a|b=1 a^b=1 a=1, b=1 → a&b=1 a|b=1 a^b=0 int a = 5; // 0101 int b = 3; // 0011 printf("%d\n", a & b); // 1 (0001) printf("%d\n", a | b); // 7 (0111) printf("%d\n", a ^ b); // 6 (0110) 3. ^ XOR 연산자 예제 #include <stdio.h> int main() { int a = 5; // 0101 int b = 3; // 0011 printf("%d\n", a ^ b); // 6 (0110) return 0; } XOR의 특징 같은 값끼리 XOR → 0 ( 7 ^ 7 → 0 ) 0과 XOR → 자기 자신 그대로 ( 7 ^ 0 → 7 ) 두 번 XOR → 원래 값으로 복귀 (토글 효과) 활용 예: 임시 변수 없이 값 교환(swap) int a = 5, b = 3; a = a ^ b; b = a ^ b; a = a ^ b; printf("a=%d, b=%d\n", a, b); // a=3, b=5 4. ~ NOT 연산자 비트를 전부 반전시키는 연산자. 핵심 규칙: ~ 가 붙으면 "+1 후 음수로" 계산하면 된다. ~x = -(x + 1) #include <stdio.h> int main() { int a = 5; printf("%d\n", ~a); // -6 return 0; } 계산 과정: ~5 = -(5 + 1) = -6 예시: ~0 → -1 ~5 → -6 ~(-1) → 0 5. << >> 시프트 연산자 << 왼쪽 시프트 10진수를 왼쪽으로 민다. 왼쪽으로 한 칸씩 밀 때마다 2배 가 된다. int a = 3; // 0011 printf("%d\n", a << 1); // 6 (0110) → 3 × 21 printf("%d\n", a << 2); // 12 (1100) → 3 × 22 >> 오른쪽 시프트 숫자만큼 오른쪽으로 민다. 한 칸씩 밀 때마다 1/2배(버림) 가 된다. int a = 12; // 1100 printf("%d\n", a >> 1); // 6 (0110) → 12 ÷ 21 printf("%d\n", a >> 2); // 3 (0011) → 12 ÷ 22 >>> (자바 전용, C언어엔 없음) 무조건 오른쪽으로 밀고, 빈 왼쪽 자리는 무조건 0으로 채운다. C의 >> 는 음수일 때 부호비트를 유지하며 채우지만(산술 시프트), 자바의 >>> 는 부호와 상관없이 왼쪽을 0으로 고정해서 채운다(논리 시프트). // Java int a = -8; System.out.println(a >> 2); // 부호 유지하며 시프트 System.out.println(a >>> 2); // 왼쪽을 무조건 0으로 채움 (결과 다름) 6. C언어 연산자 우선순위 (핵심) 전위연산자가 후위연산자보다 우선순위가 높다 ⭐ 우선순위 높은 순: ++x , --x (전위) — 먼저 증가/감소 후 사용 x++ , x-- (후위) — 먼저 사용 후 증가/감소 * , / , % — 곱셈, 나눗셈, 나머지 7. 포인터 + 전위/후위 연산자 조합 *++배열 — 포인터를 먼저 증가시킨 후 참조 int arr[] = {10, 20, 30}; int *p = arr; printf("%d\n", *++p); // 20 동작 순서: ++p (전위) → 포인터가 먼저 다음 요소로 이동 * → 그 이동한 위치의 값을 참조 p → arr[0](10) ++p 실행 → p는 arr[1](20)로 이동 *p → 20 출력 *배열++ — 현재 값 먼저 참조 후 포인터 이동 int arr[] = {10, 20, 30}; int *p = arr; printf("%d\n", *p++); // 10 printf("%d\n", *p); // 20 (포인터는 이미 이동해있음) 동작 순서: *p → 현재 위치의 값(10)을 먼저 참조 p++ (후위) → 그 다음에 포인터가 다음 요소로 이동 *p++ 실행: 1단계: *p → 10 (현재 값 사용) 2단계: p++ → p는 arr[1]로 이동 (그 다음에 일어남) *++p 와 *p++ 비교 *++p : 포인터 이동 먼저 → 그 다음 값 참조 → 결과는 다음 요소 값 *p++ : 값 참조 먼저 → 그 다음 포인터 이동 → 결과는 현재 요소 값 요약 10진수→2진수: 2로 나눈 나머지를 아래→위로 읽기 ^ (XOR): 비트가 다르면 1 ~ (NOT): ~x = -(x+1) << : 왼쪽으로 밀기 (×2배씩) / >> : 오른쪽으로 밀기 (÷2배씩) >>> : 자바 전용, 무조건 0으로 채우는 오른쪽 시프트 전위연산자( ++x )가 후위연산자( x++ )보다 우선순위 높음 *++p : 포인터 먼저 이동 후 참조 / *p++ : 먼저 참조 후 포인터 이동
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
정처기 (step15. 비트, 쉬프트 연산자). 오늘은 비트연산자 & 연산자 개념과 우선순위 정리를 해볼 예정이다. 1. 10진수 → 2진수 변환법 10진수를 2로 계속 나누면서, 나온 나머지를 아래에서 위로 읽으면 2진수가 된다. 예: 13을 2진수로 변환 13 ÷ 2 = 6 ... 나머지 1 6 ÷ 2 = 3 ... 나머지 0 3 ÷ 2 = 1 ... 나머지 1 1 ÷ 2 = 0 ... 나머지 1 나머지를 아래→위로 읽기: 1101 → 13 = 1101(2) 검산: 1101 = 1×8 + 1×4 + 0×2 + 1×1 = 13 ✅ 2. 비트연산자 종류 & (AND) : 두 비트 모두 1이면 1 | (OR) : 둘 중 하나라도 1이면 1 ^ (XOR) : 두 비트가 다르면 1 ~ (NOT) : 비트를 전부…
Open source