Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- getchar()
- perpectC
- +연산자 의미
- () (+) 차이
- 티스토리 커버이미지 변경
- 3강
- 풀이
- 점프 투 파이썬 #패키지 # 비전공자
- 합
- 3장
- 평균
- 원 면적
- 원 둘레
- 실습예제
- putchar()
- PERPECT
- 백엔드 개발자 #로드맵
- 3판
- eslint 쉼표필요 오류
- 쉼표필요
- 연습문제
- 정답
- JavaScript
- 오류
- eslint
- c
- ㅔㄴ트 안잉
- 비트마스크
- perpect C
- Chapter3
Archives
- Today
- Total
옥수수와 식빵 그리고 코딩
비트마스크로 특정 비트 키고 끄거나 반대로 하는 법 본문
참고
https://dojang.io/mod/page/view.php?id=184
비트가 1이면 on, 0이면 off이다.
예를들어
0100 0001 // 2번째, 8번째 비트가 켜진(on)상태
1. 특정 비트를 켜는 방법
플래그 |= 마스크
*플래그: 비트를 바꿀 변수
*마스크: 바꿀 비트위치를 나타냄, 바꿀 위치를 2진수로 표현한 뒤 10진수로 바꾸어 적을 것!
이 때 마스크를 적을 때 바꾸고자 하는 비트가
왼쪽에서 5번째 비트 : 10000
왼쪽에서 3번째 비트 : 00100
이런 식으로 2진수로 생각 한 뒤 2진수를 10진수로 바꾸어 마스크에 적어주어야 한다.
왜냐하면 만약 자료형이 문자형이라면 크기가 2바이트로 총 8자리 비트를 가지기 때문에
왼쪽에서 5번째 비트를 바꿀 마스크를 0001 0000으로 적거나 10진수로 적거나...
근데 10진수로 적는게 속편하다!
2. 특정 비트를 끄는 방법
플래그 &= ~마스크
3. 특정 비트가 켜져 있다면 끄고, 꺼져 있다면 켜는 방법
플래그 ^= 마스크
예를들어
int 변수 x값이 75일 때
(1) 왼쪽에서 5번째 자리의 비트값
(2) 왼쪽에서 6번째 비트를 1로 지정한 값
(3) 왼쪽에서 3번째 비트를 0으로 지정한 값
(4) 왼쪽에서 2번째 비트를 반대로 한 값
을 구하려면
#include <stdio.h>
int main(void)
{
unsigned char x = 75;
//1
printf("%u\n", x >> 4 & 1); //5번째 자리
//2
x = 75;
x |= 32; //0001 0000(2)
printf("%u\n", x);
//3
x = 75;
x &= ~4; //0000 0100(2)
printf("%u\n", x);
//4
x = 75;
x ^= 2; //0000 0010(2)
printf("%u\n", x);
return 0;
}
이다.
'이론 공부' 카테고리의 다른 글
이차원 배열 포인터 (0) | 2022.01.08 |
---|---|
signed, unsigned (0) | 2021.12.27 |
c언어 형식지정자 (0) | 2021.12.27 |
//= (ex) x //= r) (0) | 2021.12.27 |
연산자 우선순위 C (0) | 2021.12.25 |
Comments