일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- MySQL
- 백준
- Join
- 코딩테스트
- NumPy
- Matplotlib
- programmers
- 알고리즘
- javascript
- 알고리즘스터디
- 프로그래머스
- 데이터시각화
- String Method
- type hint
- 정보처리기사 c언어
- 알고리즘 스터디
- Stack
- 가상환경
- 자료구조
- Selenium
- openCV
- python
- aws jupyter notebook
- queue
- pandas
- 선그래프
- dataframe
- Algorithm
- 노마드코딩
- 파이썬
- Today
- Total
조금씩 꾸준히 완성을 향해
[C 언어] 진법 변환, 비트 연산, 매크로 본문
진법 변환
① 10진법 → 2진법 (10진수 19를 2진수로 바꾸기)
방법1
: 2로 나누어 나머지 구하기 (결과 : 10011)
방법2
: 2의 n제곱 칸을 만들어 놓고 조합해서 집어 넣기 (19는 16 + 2+ 1 이기 때문에 16, 2, 1에 각각 1씩 넣어준다)
② 2진법 → 8진법
- 2진수를 뒤에서 부터 3칸씩 자르고 분리시킨다
- 분리된 칸에 각각 2의 n 제곱 라벨을 단다
- 1이 들어가 있는 칸의 라벨 값을 모두 더한다
- 각각 나온 결과를 합치면 완성!
결과: 23
③ 2진법 → 16진법
- 2진수를 뒤에서 부터 4칸씩 자르고 분리시킨다
- 분리된 칸에 각각 2의 n 제곱 라벨을 단다
- 1이 들어가 있는 칸의 라벨 값을 모두 더한다
- 각각 나온 결과를 합치면 완성!
결과: 13
비트 연산자
① 논리곱 (& 연산자)
- 숫자를 모두 2진수로 변경
- 자리수 별로 AND 연산 수행
② 논리합 (| 연산자)
- 숫자를 모두 2진수로 변경
- 자리수 별로 OR 연산 수행
③ 비트 NOT (~연산자)
④ 시프트 연산( >>, << 연산자)
▶ 10>>2 (우 시프트)
- 10을 2진수로 변경 : 1010
- 우측으로 2칸 밀어 이동
- 결과 값 다시 10진수로 변경: 2
▶ 10<<2 (좌 시프트)
- 10을 2진수로 변경 : 1010
- 좌측으로 2칸 밀어 이동, 뒤에 빈 칸에는 0을 채움
- 결과 값 다시 10진수로 변경: 40
매크로
- 반복적인 일들을 쉽게 하기 위해 만들어 놓은 것
#define N 10 - 변수처럼 선언: 앞으로 나오는 모든 N은 10으로 대체
#define SQR(X) X*X - 함수처럼 선언: X라는 인자를 받으면 X*X로 처리
#define N 10 // 변수처럼 선언: 앞으로 나오는 모든 N은 10으로 대체
#define SQR(X) X*X // 함수처럼 선언: X라는 인자를 받으면 X*X로 처리
SQR(N); //N*N = 10*10 = 100
SQR(N+2); //N+2*N+2 = N+(2*N)+2 = 10+(2*10)+2 = 32
//함수랑 처리가 다르니 주의!!
<예제>
#include <stdio.h>
int main() {
int x = 0x11; //16진수 11 = 0001 0001
int y, z;
y = x & 0x0f; //0x0f = 0000 1111
z = x | 0x0f;
printf("x=%d, y=%d, x=%d", x, y, z);
}
// x = 0001 0001 = 17(십진수)
// y = 0001 0001 & 0000 1111 = 0000 0001 = 1(십진수)
// z = 0001 0001 | 0000 1111 = 0001 1111 = 31(십진수)
// 출력: x=17, y=1, z=31
※ 참고) 16진수 표현
0~9 | 10 | 11 | 12 | 13 | 14 | 15 |
0~9 | A | B | C | D | E | F |
#include <stdio.h>
#define VALUE1 1
#define VALUE2 2
int main() {
float i;
int j, k, m;
i = 100/300;
j = VALUE1 & VALUE2;
k = VALUE1 | VALUE2;
if (j && k || i) m = i +j;
else m = j + k;
printf("i=%.1f, j=%d, k=%d, m=%03d\n", i, j, k, m);
}
// i = 0 (정수 나누기 정수 = 정수)
// j = 0001 & 0010 = 0000 = 0(십진수)
// k = 0001 | 0010 = 0011 = 3(십진수)
// m = 0 + 3
// 출력: i=0.0, j=0, k=3, m=003
※ 유튜브 흥달쌤 깨알 C언어 특강을 직접 정리한 내용입니다
'기타 언어 > C 언어' 카테고리의 다른 글
[C 언어] switch 문 (0) | 2023.03.16 |
---|---|
[C 언어] 삼항 연산자 (0) | 2023.03.16 |
[C 언어] 출력 형식 (출력 변환 기호, 정수형 자리수, 실수형 자리수) (0) | 2023.03.16 |
[C 언어] 연산자(산술, 관계, 논리) & 연산자 우선순위 (0) | 2023.03.15 |
[C 언어] 변수의 종류와 유효범위 (0) | 2023.03.15 |