int a = 3; //초기화
int a = 10;
int b = 5;
printf("%d",a+b); // 더하기
printf("%d",a-b); // 빼기
printf("%d",a*b); // 곱하기
printf("%d",a/b); // 나누기
printf("%d",a%b); // 나머지
printf("%d",a++); // 출력 후 1 증가
printf("%d",++a); // 1 증가 후 출력
printf("%d",a--); // 출력 후 1 감소
printf("%d",a++); // 1 감소 후 출력
우선순위가 있지만 코드를 보면 직관적으로 의도를 알 수 있도록 괄호() 사용하기 !
a > b // a가 b보다 크다
a < b // a가 b보다 작다
a >= b // a가 b보다 크거나 같다
a <= b // a가 b보다 작거나 같다
a == b // a와 b는 같다
a != b // a와 b는 같지 않다
맞으면 1, 틀리면 0
c언어에서 0이 아니면 전부 맞다는 것
논리연산 결과가 맞으면 1로 표시
틀리면 0으로 표시
a && b //AND 연산 : 둘 다 참이면 참
a || b //OR 연산 : 둘 중 하나이상 참이면 참
!(a > b) //NOT 연산 : 참이면 거짓, 거짓이면 참
a = 1;
b= -2;
d = a || b; // a = 1이기때문에 컴파일러는 b를 무시하고 d에 1을 넣음
if(isRunning() || isHot()){
turnOffHeater();
}
-> isHot() 을 확인하지 않는 버그가 생길 수도 있다
// 자신에 오른쪽 값을 더해 넣는다
a += 1;
a = a + 1;
// 자신에 오른쪽 값을 빼 넣는다
a -= 1;
a = a - 1;
// 자신에 오른쪽 값을 곱해 넣는다
a *= 2;
a = a * 2;
// 자신에 오른쪽 값을 나눠 넣는다
a /= 2;
a = a / 2;
// 자신에 오른쪽 값을 나누어 나머지를 넣는다
a %= 2;
a = a % 2;
임베디드는 레지스터 값을 수정하는 경우가 많기 때문에 비트연산자를 알고 있어야 한다
a & b // and 연산
a | b // or 연산
a ^ b // xor 연산
~ a // not 연산
a << 1 // 오른쪽으로 1비트 shift
a >> 1 // 왼쪽으로 1비트 shift
비트 연산이 cpu 연산 속도가 훨씬 빠르다
a << 1 // a * 2랑 같다
a >> 1 // a / 2랑 같다
if문 대신 간단하게 사용 가능하다
조건 ? 참일 때 값 : 거짓일 때 값
#include <stdio.h>
int isRunning();
int main(){
//참은 0이 아니면 참이다
//거짓은 0이다
(1) ? printf("print 1\n") : printf("not\n");
(0) ? printf("print 1\n") : printf("not\n");
(isRunning()) ? printf("참\n") : printf("거짓\n");
return 1;
}
int isRunning(){
int a = 3;
int b = 2;
if(a > b){
return 1;
}else{
return 0;
}
}
int i = 3;
double d = 3.4;
printf("%d\n",((int)d + i);
int i = 3;
double d = 3.4;
printf("%f\n",(d + i);
// 자동으로 int i가 double로 바뀜