Programming

(C언어) 비트 연산

summerorange 2022. 3. 21. 19:49
반응형
#include <stdio.h>

//int main(int argc, const char * argv[]) {
//    printf("Hello, World!\n");
//    printf("Git Commit");
//    return 0;
//}

main() {
    int n, i, t, sum = 0;
    printf("number of integer?");
    scanf("%d", &n);
    for(i=1; i<=n; i++) {
        printf("%d integer?: ", i);
        scanf("%d", &t);
        sum = sum + t;
        
    }
    printf("sum: %d\n", sum);
    printf("average: %f\n", (float)sum/n);
    return 0;
}

int 형 변수에 저장훌 수 있는 최대 숫자 2,147,483,647 

main() {
    char ch;
    printf("영어 소문자를 입력하세요: ");
    scanf("%c", &ch);
    switch (ch) {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u': printf("모음\n"); break;
        default: printf("자음\n");
    }
}

비트 연산

A B A&B A|B A^B
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

비트 단위 연산자는 2진수 형태의 비트 자리별로 논리 연산을 수행하는 연산자

& 논리곱 AND

| 논리합 OR

3&1 일 때 비트 값 11(2) & 01(2)의 논리곱을 비트 단위로 수행함. 둘 다 참이어야만 참이 나오니 이 때 결과는 01(2) 즉 1로 나오게 됨!

3|1 일 때는 논리합이기 때문에 둘 중 하나라도 참이면 참으로 나오기 때문에 11(2), 즉 3으로 나오게 됨

^ 는 배타적 논리합(XOR)인데 두 비트의 값이 다를 때만 참(1)이 되는 연산. 머신러닝과 인공지능 다룰 때 주요하게 봤던 것으로 기억

3^1일 때는 11(2) 01(2) 의 연산을 하면 10(2)가 되어서 결국 2가 되어버림. 

3 << 1 -> 좌측으로 1비트씩 이동하는 것임

11(2)에서 -> 110(2) 으로 변환 즉 6이 나옴

3>> 1 -> 우측으로 1칸 이동

11(2)에서 001(2)로 이동. 즉 1이 나옴 

>> 와 << 는 Shift 연산자

'~'는 비트 열의 값을 각각 부정하는 것이기 때문에 11(2)를 부정하면 11111~~~ 00(2)로 나타날 수 있음

#include <stdio.h>


main() {
    printf("%d %d\n", 3&1, 3|1);
    printf("%d\n", 3^1);
    printf("%d %d\n", 3<<1, 3>>1);
    printf("%d\n", ~3);
}

결과는

1 3
2
6 1
-4

복합 대입 연산자

Code:

main() {
	int a = 3, b = 2;
	printf("%d %d\n", a++, --b);
	a += 1; b -= 1;
	printf("%d %d\n", a, b);
}

a++, b++ 하면 delay 있음.

바로 출력하려면 ++a, --b 로 작성해야 함!

main() {
	int a = 3, b = 2;
	printf("%d\n", &a);
	printf("%d\n", *&a);
}

&a는 변수 a의 주소. 변수 a가 저장된 메모리(RAM) 공간의 주소값을 알아낸다.

*는 변수 a의 주소에 저장된 값을 나타내는 연산자이다.

 

반응형

'Programming' 카테고리의 다른 글

(C언어) for  (0) 2022.03.24
(C언어) 조건문  (0) 2022.03.24
(C언어) 연산 타입  (0) 2022.03.23
Computational Thinking 컴퓨팅 사고력  (0) 2022.03.20
audacity 문제 해결  (0) 2021.09.24