1. 포맷팅 및 연산
1) int a = 10;
printf("%d\n", a++) = 10
printf("%d\n",a) = 11
2) int b = 11;
printf("%d\n",++b) = 12
3) 아스키코드
- 대문자와 소문자는 32의 차이가 난다. (대문자가 먼저)
- char c = 'a'
- print("%c\n",c-32) = A
2. Switch - case 문
1) 해당하는 case 부터 break문 나올때까지 계속 출력 **
int main(){
int num = 2;
switch(num) {
case1: ~~~
case2: ~~~
case3: ~~~ break;
default : ~~~}
return 0
}
// case2, case3 이 출력됨.
3. 포인터(주소값)
1) 주소 변수는 태어날 때, 별을 가지고 태어난다
- int *ptr1 = arr;
- 주소값을 선언.
2) 사용할때 별은 주소가 아니라 value를 나타낸다. 주소를 사용할때는 별을 붙이지 않음.
int main(){
int arr[] = { 10,20,30,40,50 };
int *ptr1 = arr; //태어날때 별은 주소값을 말한다.(가장 첫번째 값이 위치한 곳)
int *ptr2 = &arr[2]; //&은 주소연산자. 변수앞에 붙이면 해당 위치값을 의미.
printf("value:%d\n",*(ptr1 + 2)); //ptr1의 주소값에 2번지를 더한 위치의 value.
printf("value:%d\n",*ptr2); //사용할 때 별은 value값을 의미한다.
}
3) 구조체 포인터 저장변수는 int* p, 식으로 타입 이름 뒤에 붙인다. ex ) struct Node* next;
4. 배열
1) 문자 배열
- char types[][10] = {"Apple","Banana","Orange"};
- 각 단어가 10글자 미만의 배열이라는 의미. types[0] = "Apple";
2) 배열 길이
- int arr[] = {1,2,3,4,5};
- int *ptr = arr;
- int number = sizeof(arr) / sizeof(arr[0]);
// arr의 전체 길이를 1개의 arr의 길이로 나누면, 전체 배열의 갯수를 알 수가 있다.
// 예를 들어 sizeof(arr) = 50 이고 sizeof(arr[0]) = 5 이면 총 배열의 길이는 5.
5. 구조체 vs 구조체 포인터
1) 구조체
struct Person{
char name[20]; //20자까지
int age;
};
struct Person p1 = {"Alice",25};
printf("%s is %d years old.", p1.name, p1.age);
//p1은 구조체 자체이기때문에 p1.으로 바로 접근이 가능하다.
2) 구조체 포인터
struct Person{
char name[20]; //20자까지
int age;
};
struct Person p1 = {"Alice",25};
struct Person *ptr = &p1;
printf("%s is %d years old.", ptr ->name, ptr ->age);
//ptr은 p1의 포인터이기때문에 -> 로 접근.
- 사용이유 ?
- 구조체가 엄청나게 크면 복사하기 힘듬, 포인터 변수는 크기가 작음 등..
6. 비트연산자
1) & 하나만
- 앞 뒤를 이진수로 바꾼 이후, 두 비트가 모두 1일때만 1을 반환한다. 같은 자리수를 비교.
int a= 5; //0101
int b = 3; //0011
int result = a&b; //0001
2) | 하나 (OR)
- 앞 뒤를 이진수로 바꾼 이후, 두 비트 중 하나만 1이어도 1을 출력. 같은 자리수를 비교.
int a= 5; //0101
int b = 3; //0011
int result = a|b; //0111
3) ^ 하나(XOR)
- 앞 뒤를 이진수로 바꾼 이후, 두 비트가 다른 경우만 1을 출력. 같은 자리수를 비교.
int a= 5; //0101
int b = 3; //0011
int result = a^b; //0110
4) ~ 하나(NOT)
- 하나의 값의 비트를 반전시킨다(0은1, 1은 0으로)
int a = 5; //0101
int result = ~a; //1010 인데 2의 보수어쩌고~ 로 -(a+1)로 외우면 된다.
//답은 -6
5) 시프트 연산
- << : 비트를 왼쪽으로 밀고, 오른쪽에 0을 채운다.
- >> : 비트를 오른쪽으로 밀고, 왼쪽에 채움(양수는 0, 음수는 1)
int a = 3; // 0000 0011
int b = a << 1; // 0000 0110 → 6
// a << n 은 a * 2^n 과 같음.
// 3 << 1 = 3 * 2 = 6
int a = 8; // 0000 1000
int b = a >> 2; // 0000 0010 → 2
// a >> n 은 a / 2^n과 같음.
// 8 >> 2 는 8 / 4 = 2
//활용예시
1. x << 3 // x * 8
2. x >> 2 // x/4
3. if((x>>3) & 1 ) {
// x의 4번째 비트가 1인지 확인
}'강의 정리' 카테고리의 다른 글
| [정보처기기사] 실기 프로그래밍 정리 - 자바 (0) | 2025.07.05 |
|---|---|
| [정보처기기사] 실기 프로그래밍 정리 - 파이썬 (0) | 2025.06.29 |