문제 유형: 비트 연산
ECOLI_DATA 테이블에서
| 컬럼명 | 타입 | 설명 |
|---|---|---|
| ID | INTEGER | 대장균 개체 ID |
| PARENT_ID | INTEGER | 부모 개체 ID |
| SIZE_OF_COLONY | INTEGER | 군집 크기 |
| DIFFERENTIATION_DATE | DATE | 분화일 |
| GENOTYPE | INTEGER | 형질 (비트 저장) |
GENOTYPE은 각 형질을 비트로 저장합니다. 예를 들어:
1248이진수 예시:
| GENOTYPE | 2진수 표현 | 포함 형질 |
|---|---|---|
| 1 | 0001 | 1번 |
| 4 | 0100 | 3번 |
| 5 | 0101 | 1번, 3번 |
| 13 | 1101 | 1번, 3번, 4번 |
| 15 | 1111 | 1, 2, 3, 4 |
2번 형질 없음
→ GENOTYPE & 2 = 0
1번 또는 3번 형질 있음
→ GENOTYPE & 1 > 0 OR GENOTYPE & 4 > 0
& (비트 AND 연산자)AND: 두 조건 모두 만족해야 함OR: 둘 중 하나만 만족해도 됨&는 AND 연산자로, 두 수의 이진수 자리마다 모두 1이면 1을 반환.
| 항목 | 설명 |
|---|---|
& 연산자 | 두 비트가 모두 1일 때만 1을 반환 |
& n = 0 | 해당 형질 없음 |
& n > 0 | 해당 형질 있음 |
OR 연산자 | 둘 중 |
예시:
GENOTYPE = 5 → 0101
5 & 1 → 0101 & 0001 = 0001 → 결과 1 (1번 형질 있음)
5 & 2 → 0101 & 0010 = 0000 → 결과 0 (2번 형질 없음)
SELECT COUNT(*) AS COUNT
FROM ECOLI_DATA
WHERE GENOTYPE & 2 = 0
AND (GENOTYPE & 1 > 0 OR GENOTYPE & 4 > 0);