반응형
연산자의 우선순위
수학과 같이 곱셈이 먼저다
printf("%lf",10/4);
더블형을 출력하려고 했지만 정수형 계산을 하면 경고가 난다
단항 산술 연산자 단항 +와 -
1 | -> | (), [], ., ->, ++, -- |
2 | <- | (형), sizeof, *(참조),&, ++, --, +(부호), -(부호) ~, ! |
혼합 대입 연산자
#include <stdio.h>
int main(void)
{
int a = 5;
printf("%d\n", a);
a = a + 5; printf("%d\n", a);
a += 5; printf("%d\n", a);
a -= 5; printf("%d\n", a);
a *= 5; printf("%d\n", a);
a /= 2; printf("%d\n", a);
a *= a + 5; printf("%d\n", a); // a = a * (a + 5) = 25 * 30
return 0;
}
관계 연산자
- 관계 또는 비교 연산자는 루프나 조건문 등에서 크기나 조건 등을 비교할 때 사용하는 연산자
- 크기를 비교하는 <, <=, >, >= 연산자
- 연산결과가 참이라면1, 거짓이면 0이 나온다
- 정수형과 실수형 뿐만 아니라 문자형 데이터도 대소 관계를 비교할 수 있다
논리 연산자 : &&, ||, !
&&(and), ||(or), !(not)
- &&와 ||는 두 개의 피연산 자가 필요
- &&연산자는 두 피연산자가 모두 참 일때 참
- || 연산자는 둘중 하나만 참이면 참
- !연산자는 한개의 피 연산자가 필요
- !연산자는 피연산자가 참이면 거짓, 거짓이면 참으로 만듦
관계 연산자 + 논리 연산자
- score값이 90이상~95미만 이면 A출력
- 수학적으로 다음과 같다
- if(90<=score<95) : x
- if(90 <= score <95)
- 관계 연산자는 우선순위가 같으면 왼쪽에서 오른쪽으로 연산을 진행하는 결합성을 가짐
- C언어에서는 아래와 같이 표현
- if(score >= 90 && score <95): 이렇게 적어야한다
비트연산자
수를 2진수로 바꾼 후 비트별로 연
연산자 | 의미 |
---|---|
a & b | a와 b를 2진수로 표현한 후, 비트 단위로 AND 특정 비트를 0으로 변경하는 mask off |
a | b | a와 b를 2진수로 표현한 후, 비트 단위로 OR 특정 비트를 1로 변경하는 용도로 많이 사용 |
a ^ b | a와 b를 2진수로 표현한 후, 비트 단위로 XOR 두 비트가 다른 경우에만 1이 됨 (caret) |
~a | a의 1의 보수 0을 1로, 1은 0으로 바꿈 (tilde) |
비트 시프트 연산자
- 우측의 숫자만큼 좌측 혹은 우측으로 비트를 시프트 시킨다
- 양의 정수의 경우 좌측 << 시프트 연산자으로 한 비트씩 시프트 시킬 때 마다 원래 값의 두배가 나온다
- 우측 >> 시프트 일 경우 한비트씩 시프트 시킬때마다 원래 값의 1/2배가 나온다
- 시프트시킬때 빠져나가는 비트가 1이면 overflow , underflow가 발생하여 2의엔승 배의 곱이나 나누기가 되지 않는다
- 시프트 연산자의 피연산자는 정수형 만 가능하다
- 부호있는 정수형도 가능한지만 일반적으로 부호없는 형만 사용한다.
6 | 0110 | |
3 | 0011 | -> |
12 | 1100 | <- |
좌측으로하면 2분의 1 우측으로 한칸 갈때마다 2배씩하여 12라는 수가 나오게 된다.
#include<stdio.h>
#include<string.h>
int main(void){
printf("%d\n",90<<1);
printf("%d\n",90>>1);
printf("%d\n",90<<2);
printf("%d\n",90>>2);
printf("%d\n",90<<3);
printf("%d\n",90>>3);
printf("%d\n",90<<4);
printf("%d\n",90>>4);
printf("%d\n",90<<5);
}
한번 할때마다 2를 곱하거나 2를 나누면 된다 간단하다.
삼항 조건 연산자
- 항이 3개여서 3항 연산자라고도 하며 if ~ else문을 한줄로 간결하게 표현할 수 있음
- 수식 1 ? 수식2 : 수식3
- 수식1의 조건이 참이면 수식이를 실행하고, 거짓이면 수식3을 실행
증가, 감소 연산자
- 산술 연산자로 피연산자가 하나인 단항 연산자
- 이 연산자는 피연산자의 값을1 만큼 증아나 감소시킨다
- 피연산자 앞에쓰는 경우는 전치
연산자 | 의미 |
++a | a를 1증가시킨 후 수식 평가 |
--a | a를 1감소시킨 후 수식 평가 |
- 피 연산자 뒤에 쓰는 경우는 후치 라고한다
연산자 | 의미 |
a++ | 수식을 평가한 후 a를 1증가 |
a-- | 수식을 편가한 후 a를 1 감소 |
#include<stdio.h>
#include<string.h>
int main(void){
int a=10, b=10, c=20, d=20;
int ap, bp, cm, dm;
ap = ++a;
printf("a=%d, ap=%d\n", a, ap);
bp = b++;
printf("b=%d, bp=%d\n", b, bp);
cm = --c;
printf("c=%d, cp=%d\n", c, cm);
dm = d--;
printf("%d\n", dm++);
printf("%d\n", ++dm);
return 0;
}
cast연산자
- c언어에서는 자료형이 서로 다른 혼합 연산에서는 기억 장소의 크기가 큰 쪽으로 통일시켜 연산이 이루어진다
- int형과 double형의 연산에서는 int형이 doulbe형으로 변환되어 결과가 doulbe형으로 나온다
- 이미지정된 자료형을 다른 자료형으로 일시적으로 강제로 바꿀 수 있는데 이것을 명시적 형변환 이라고 하며 cast연산자 사용
- 변환시키고자 하는 값이나 변수 앞에 해당 자료형을 괄호로 묶어 주면 됨
//자료형 값 or 변수
(int) x, (char)ch, (double)sum
콤마 연산자
- 여러 개의 수식을 하나의 수식처럼 표현 할 때 사용
- 수식들을 콤마에 의해 열거 되어 있는 순서대로 평가하며 왼쪽부터 평가하여 오른쪽의 식의 값을 결과 값으로 한다
- 모든 연산자에서 우순 순위가 가장 낮다
- 병수 선언문에서 사용하는 콤마는 연산자가 아닌 구두점이다
- int i,j,k;
- z = (x=7,y=3,x*y); // z=21
- 콤마 연산자는 결합 방향이 왼쪽에서 오른쪽이므로 x=7, y=3,x*y를 차례대로 수행하여 21이 나오고 그 결과를 z에 대입한다
- 콤마연산자는 여러줄을 줄일때 사용
sizeof연산자
- sizeof연산자는 변수나 자료형, 배열 등이 차지하는 메모리 영역의 크기를 바이트(byte)단위로 얻음
- 자료형 크기를 알고싶을때는 반드시 괄호를 사용해야하며 변수는 괄호를 생략해도 됨
- sizeof 변수 or 배열명
- sizeof num <-변수라서 괄호 생략
- sizeof(자료형)
- sizeof(int)
- 상수 문자열의 경우 널 문자 \, 0 , 1 바이트를 포함한 길이가 나온다
- sizeof("soft") //5,4가 아닌 5가 나온다
- 한글은 한 글자가 2 바이트
- 배열은 sizeof(배열명)을 쓰고, 자료형 x방의 크기가 계산되어 나온다
#include<stdio.h>
int main(void){
int x;
int y[10];
printf("%zd\n",sizeof("Hello World")); // 12
printf("%zd\n",sizeof(x)); // 4
printf("%zd\n",sizeof(y)); // 40
}
&연산자: 주소 연산자
#include<stdio.h>
int main(void){
int a = 10, b =20;
printf("%d, address of a = %p\n", a, &a);
printf("%d, address of b = %p\n", b, &b);
}
&a는 a변수의 메모리 주소의 첫 번지 int형은 4바이트이므로 변수의 저장 공간은 4개의 주소를 가진다
&는 그 중에서 시작 주소를 얻을 수 있다
지역 변수는 메모리의 스택이란 공간에 저장되며 컴퓨터 os따라서 틀리다
실습문제
국어 영어 수학 3과목의 성적을 키보드로 입력받아 총점과 평균을 출력하는 프로그램을 작성하기
각 과목 중 최고 점수도 출력 (조건 연산자 이용하기)
변수명을 저장값에 맞게 만들고 프로그램에 상세한 주석문도 작성하기
#include<stdio.h>
#define AVERAGE(i,j,k) ((i+j+k)/3.0)
#define TOTAL(i,j,k) (i+j+k)
int main(void){
int total, eng, math, kor;
double avg;
int max;;
printf("국어 점수를 입력하세요 :" );
scanf("%d",&kor);
printf("영어 점수를 입력하세요 : ");
scanf("%d",&eng);
printf("수학 점수를 입력하세요");
scanf("%d",&math);
total = TOTAL(kor, eng, math);
avg = AVERAGE(kor, eng, math);
max = kor > eng ? kor : eng;
max = max > math ? max : math;
printf("가장 큰 점수는 %d 이며 총점은%d이고 평균은 %lf 입니다",max,total,avg);
return 0;
}
반응형
'c프로그래밍 > 예습' 카테고리의 다른 글
c14주차 (1) | 2025.05.28 |
---|---|
C언어 10주차 제어문 (0) | 2025.05.10 |
C언어 6주차 예습 (0) | 2025.04.10 |
C언어 5주차 예습 (0) | 2025.04.04 |
C언어 4주차 예습 (1) | 2025.03.29 |