중요한 부분 : enum, bit로 출력하기,
Bitwise operation
bitwise logical operator
complement : ~
AND : &
OR : |
XOR : ^
// example
#include <stdio.h>
int main()
{
unsigned char num1 = 1; //0000 0001
unsigned char num2 = 3; //0000 0011
printf("%d\n", num1&num2); // 0000 0001
printf("%d\n", num1|num2); // 0000 0011
printf("%d\n", num1^num2); // 0000 0010
return 0;
}
bitwise shift operator
left shift : <<
right shift : >>
shift 연산자는 두번째 피연산자가 정하는 위치 만큼 첫번째 피 연산자를 왼쪽(<<) 혹은 오른쪽(>>)으로 이동시킨다.
unsigned int x, y, z;
x = 0x00AA;
y = 0x5500;
z = (x<<8) + (y>>8); // 0XAA55
operator precedence & association
<< >> & ^ |
two's complement
뺄셈에 필요함
-n : 비트 연산자를 적용하고, 1을 더한다.
(앗 2의 보수)
(모든 자리의 숫자를 반전시키고, 1을 더하면 된다)
[Programming] 2의 보수 계산하는 방법, Two's Complement (tistory.com)
masks
원하는 비트를 추출하기 위한 상수
원래의 binary sequence와 비교대조용 시퀀스를 만들어서
그것을 마스크처럼 씌워 원하는 비트를 추출한다.
#include <stdio.h>
#
int main()
{
unsigned short data =0x5678;
unsigned short msk1 =0xf000;
unsigned short msk2 =0x0f00;
unsigned short msk3 =0x00f0;
unsigned short msk4 =0x000f;
printf("결과1 = %#.4x\n", data&msk1); // 0x5000
printf("결과1 = %#.4x\n", data&msk2); // 0x0600
printf("결과1 = %#.4x\n", data&msk3); // 0x0070
printf("결과1 = %#.4x\n", data&msk4); // 0x0008
return 0;
}
printing an int bitwise
#include <limits.h>
void bit_print(int a){
int i;
int n = sizeof(int) * CHAR_BIT;
int mask=1<<(n-1);
for (i=1;i<=n;++i){
putchar(((a&mask)==0)?'0':'1');
a<<=1;
if (i%CHAR_BIT==0&&i<n){
putchar(' ');
}
}
}
packing and unpacking
enumeration types
열거형 type enum
0 1 2 등 상수 대신 Sun 등 의미가 담긴 identifier를 상수 대신 사용할 수 있다.
사용법
step 1. enum 선언
enum day {Sun, Mon, Tue, Wed, Thur ,Fri, Sat};
step 2. day로 변수 생성
day next_day;
step 3. 변수로 상수 대신 활용
next_day = Mon;
full version
#include <stdio.h>
enum day {Sun, Mon, Tue, Wed, Thur, Fri, Sat};
typedef enum day day;
int main(void){
find_next_day(Mon);
return 0;
}
day fine_next_day(day d){
day next_day;
next_day = (day)((int)d + 1) % 7;
return next_day;
}
형 변환 주의!
'Computer Science > C' 카테고리의 다른 글
C언어 11강 | File I/O | 끝 부분 아직 하는 중 (0) | 2021.12.17 |
---|---|
C언어 8강 | 전처리기 Preprocessors (0) | 2021.12.17 |
C언어 10강 | Structures and list processing | 제일 중요함 *** (0) | 2021.12.17 |
C언어 9강 | 구조체 Structures (0) | 2021.12.17 |
C언어 6강 | Arrays, Pointers, and Strings | 중요! (0) | 2021.12.16 |