C연산자

2025. 4. 18. 16:52·c프로그래밍/예습
반응형

 

연산자의 우선순위

수학과 같이 곱셈이 먼저다 

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
'c프로그래밍/예습' 카테고리의 다른 글
  • c14주차
  • C언어 10주차 제어문
  • C언어 6주차 예습
  • C언어 5주차 예습
NetStat
NetStat
netstats 님의 블로그 입니다.
  • NetStat
    NetStats
    NetStat
  • 전체
    오늘
    어제
    • 분류 전체보기 (33) N
      • JAVA (0)
      • SQL (0)
      • c프로그래밍 (16)
        • 예습 (8)
        • Class (6)
      • 파이썬 (4)
        • 기초 (4)
      • 환경설정 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    문자형
    캐스팅
    vscode
    else
    파이썬 연산
    파이썬 기초
    Python
    dl emfd
    식별자
    이스케이프 시퀀스
    elif
    python3
    printf
    sacnf
    For문
    실수형
    M1
    escape sequence
    parameter
    연산자
    argument
    리턴
    비쥬얼 스튜디오 설치
    C
    열거형
    정수형
    C언어 기초
    매개변수
    파이썬
    c언어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
NetStat
C연산자
상단으로

티스토리툴바