못정함
C언어) 4-2장 : 그 외 유용한 연산자 본문
형 변환 / sizeof / 복합대입 / 콤마 / 조건
비트
연산자 우선순위, 방향
<형 변환 연산자>
-피연산자를 하나 가짐 -피연산자의 값을 원하는 형태로 바꿈. ex) 정수형을 실수형으로 / 실수형을 정수형으로 -일시적으로 바꾸는 것임. 연산 후 메모리에 남아 있는 피연산자의 형태나 값은 변하지 X |
int a = 10; 일 때 (double)10 하면 됨 |
-정수 부분만 추리고 싶을 때도 사용함 (소수점 이하의 값은 반올림X. 무조건 버림) |
자동 형 변환
-피연산자가 2개 이상이면 피연산자의 형태가 같아야함.
-형태가 다르면 형태를 자동으로 일치시킴.
-데이터 크기가 작은 값이 크기가 큰 값으로 바뀜.
-정수(4byte) , 실수(8byte) ==> 실수로 자동 변환.
-대입 연산자는 무조건 좌항의 변수형에 맞게 저장됨
-웬만하면 네가 잘 맞추셈 첨부터.........
<sizeof 연산자>
-피연산자 하나 -피연산자의 크기를 byte 단위로 계산해서 알려줌 -데이터 크기 확인, 메모리 동적 할당 시 사용 -배열의 크기 확인 |
sizeof(피연산자) -피연산자의 대상: 변수, 상수, 수식, 자료형 등 |
<복합대입 연산자>
- 연산 결과를 다시 피연산자에 저장하고 싶을 때 사용 - 저장되는 공간과 연산되는 공간이 다름 - 비트 연산자 / 대입 연산자와 결합되어 쓰이기도 함 |
<산술 복합대입 연산자> += -+ *+ /+ %= |
(연산자의 특징을 그대로 가진다) ⓛ 왼쪽 피연산자는 반드시 변수 ② 오른쪽 항의 계산이 모두 끝난 후, 가장 마지막에 복합대입 연산자를 계산 |
<콤마 연산자>
-한 번에 여러 개의 수식을 차례로 나열해야 할 때 사용 -왼쪽부터 오른쪽으로 차례로 연산 수행 -오른쪽의 피연산자가 최종 결괏값이 됨 |
-대입 연산자보다 유일하게 우선순위가 낮은 연산자 -대입 연산자와 함께 사용할 땐 반드시 괄호를 써야함 |
-제어문에서 조건식을 나열하는 괄호 안과 같이 세미콜론 사용이 불가능한 구조에서 사용됨 ex) for ( i=0, j=10; i < j; i++) 반복문에서 초깃값 설정하는 두 문장 (i=0, j=10)을 세미콜론으로 구분하면 에러가 나서 ,를 사용 |
아래 예시를 통해 res = (++a, ++b); res = ++a, ++b; 의 차이를 살펴보자 |
<조건 연산자>
-유일한 삼항 연산자 ? 와 : 기호를 함께 사용 -매크로함수에 사용하면 좋음 -가독성을 떨어뜨릴 가능성이 있음 (사실 상 제어문이라고 생각하셈) |
(a > b) ? a : b 해석) -첫 번째 피연산자(조건식)가 참이면 두 번째 피연산자가 결괏값이 됨 -첫 번째 피연산자(조건식)가 거짓이면 세 번째 피연산자가 결괏값이 됨 a > b가 참이면 a a > b가 거짓이면 b |
*조건 연산자의 피연산자에 대입식을 직접 사용할 수도 있음 res = (a > b) ? a : b; 를 이렇게도 쓸 수 있음 (a > b) ? (res = a) : (res = b); (a > b) ? (res1 = a) : (res2 = b); 처럼 결과 반영 대상이 다를 경우에 유용하겠죠? *바로 printf 넣어도됨 (148p. 도전실전문제 / 4_dojun.c) ((BMI > 20.0) && (BMI < 25.0)) ? printf("표준입니다."\n) : printf(""체중관리가 필요합니다."\n); |
<비트 연산자>
& 논리곱 ^ 배타적 논리합 연산자 | 비트별 논리합 연산자 ~ 비트별 부정 연산자 << 비트를 왼쪽으로 이동 >> 비트를 오른쪽으로 이동 |
#include <stdio.h>
int main(void){
int a = 10;
int b = 12;
printf("a & b : %d\n", a & b);
printf("a ^ b : %d\n", a ^ b);
printf("a | b : %d\n", a | b);
printf("~a : %d\n", ~a);
printf("a << 1 : %d\n", a << 1);
printf("a >> 2 : %d\n", a >> 2);
return 0;
}
결과
a & b : 8
a ^ b : 6
a | b : 14
~a : -11
a << 1 : 20
a >> 2 : 2
음...
필요할 때 공부하겠습니다...
지금은 아님
<연산자 우선순위와 연산 방향>
- 단항 > 이항 > 삼항 ex) 단항: ++ / 이항: * (피연산자 2개 필요) - 산술 > (비트 이동 연산자) > 관계 > 논리 *대입 연산자, 단항 연산자는 오른쪽에서 왼쪽으로 연산 수행 ex) a = (b = c) - ( (double) a ) |
-산술) +, - , *, / , % -관계) >, <, ==, != -논리) && , || , ! |
헷갈리니까 괄호를 열심히 쓰자 |
그밖에...
&(주소 연산자) , *(간접 참조 연산자) ===> 9장(포인터)에서
.(멤버 접근 연산자), -> (간접 멤버 접근 연산자) ===> 17장(구조체)에서
'C언어 공부 > C언어 독학 (교재)' 카테고리의 다른 글
C언어) 6장: 반복문 (0) | 2024.09.15 |
---|---|
C언어) 5장 선택문 (if문, switch ~ case문) (1) | 2024.09.15 |
C언어) 4-1장: 산술, // 관계, 논리 연산자 (제어문에 사용) (0) | 2024.09.14 |
C언어) 3-2장: 데이터 입력 (0) | 2024.09.14 |
C언어) 3-1장 변수 : 내가 모르는 거 위주로 (0) | 2024.09.14 |