반응형
메모리가 부족한 환경이나, 좀 더 나은 속도, 짧은 코딩을 하기 위해서 비트연산자를 사용하게 됩니다.
하지만 그와 반대로 대부분 코드를 이해하기가 더 힘들어지게 됩니다.
그러나 네이밍을 잘 한다면, 좀 더 보기가 나을 것 입니다.
비트연산자
아래 방법의 하나의 방법일 뿐 입니다.
참고는 하셔도 되지만, 성능이 정확도는 장담하지 않습니다.
좀 더 나은 방법들을 알고 계신분들은 댓글로 부탁드립니다.
※ 참고사항
특정 비트 '0'으로 설정하기
특정 비트 '1'로 설정하기
특정 비트 Blink 설정하기 ('0' --> '1' , '1' --> '0')
만약 위의 Blink 코드가 길다고 생각하면 그냥 하나의 줄로 묶어버려도 됩니다.
좀 더 이해하기 쉽게 하기 위해서 풀어서 썼습니다.
한줄로 쓴다면 아래와 같이 되겠죠. 그냥 치환하시면 됩니다.
하지만 그와 반대로 대부분 코드를 이해하기가 더 힘들어지게 됩니다.
그러나 네이밍을 잘 한다면, 좀 더 보기가 나을 것 입니다.
비트연산자
& : AND
| : OR
^ : XOR
~ : NOT
| : OR
^ : XOR
~ : NOT
아래 방법의 하나의 방법일 뿐 입니다.
참고는 하셔도 되지만, 성능이 정확도는 장담하지 않습니다.
좀 더 나은 방법들을 알고 계신분들은 댓글로 부탁드립니다.
※ 참고사항
LED 레지스터는 1byte이고, 각 비트가 하나의 LED로 가정합니다.
그러므로 LED 개수는 8개 미만 입니다. 의미를 두기 위해 unsigned char로 선언하였습니다.
마이크로프로그래밍에서는 P[Num]과 동일하다고 생각하시면 됩니다.
매개변수로 넘겨주는 값은 여러개의 LED를 제어 할 수 있습니다.
예를 들어 0b01001101 이라는 값을 넘겨주면 0, 2, 3, 6번째 비트를 제어 하겠다는 의미입니다.
그러므로 LED 개수는 8개 미만 입니다. 의미를 두기 위해 unsigned char로 선언하였습니다.
마이크로프로그래밍에서는 P[Num]과 동일하다고 생각하시면 됩니다.
매개변수로 넘겨주는 값은 여러개의 LED를 제어 할 수 있습니다.
예를 들어 0b01001101 이라는 값을 넘겨주면 0, 2, 3, 6번째 비트를 제어 하겠다는 의미입니다.
특정 비트 '0'으로 설정하기
unsigned char LED = 0b001101010;
void setBitClear(unsigned char ucLeds) {
unsigned char ucResult = LED & (~ucLeds);
LED = ucResult;
}
void setBitClear(unsigned char ucLeds) {
unsigned char ucResult = LED & (~ucLeds);
LED = ucResult;
}
특정 비트 '1'로 설정하기
unsigned char LED = 0b001101010;
void setBitSet(unsigned char ucLeds) {
unsigned char ucResult = LED | ucLeds;
LED = ucResult;
}
void setBitSet(unsigned char ucLeds) {
unsigned char ucResult = LED | ucLeds;
LED = ucResult;
}
특정 비트 Blink 설정하기 ('0' --> '1' , '1' --> '0')
unsigned char LED = 0b001101010;
void setBitBlink(unsigned char ucLeds) {
usigned char ucResult, ucOffLeds, ucOnLeds;
ucOnLeds = LED & ucLeds;
ucOffLeds = ucLeds ^ ucOnLeds;
ucResult = LED & ~ucOnLeds;
ucResult = result | ucOffLeds;
LED = ucResult;
}
void setBitBlink(unsigned char ucLeds) {
usigned char ucResult, ucOffLeds, ucOnLeds;
ucOnLeds = LED & ucLeds;
ucOffLeds = ucLeds ^ ucOnLeds;
ucResult = LED & ~ucOnLeds;
ucResult = result | ucOffLeds;
LED = ucResult;
}
만약 위의 Blink 코드가 길다고 생각하면 그냥 하나의 줄로 묶어버려도 됩니다.
좀 더 이해하기 쉽게 하기 위해서 풀어서 썼습니다.
한줄로 쓴다면 아래와 같이 되겠죠. 그냥 치환하시면 됩니다.
unsigned char ucResult = LED & (~(LED & ucLeds)) | (ucLeds ^ (LED & ucLeds));
반응형
'프로그래밍 > C++' 카테고리의 다른 글
printf 출력 서식 (0) | 2011.10.18 |
---|---|
C 언어 레퍼런스 - localtime 함수 (0) | 2011.10.13 |
[System Call] 메모리 맵 - mmap(), munmap(), msync() (0) | 2011.03.04 |
[C++] 상속 두번째, 세가지 형태의 상속 (private, protected, public) (0) | 2011.03.03 |
매크로 (0) | 2010.12.21 |
Unicode 와 ANSI 문자의 변환을 해주는 매크로 (0) | 2010.12.11 |
가변인자 사용하기 (0) | 2010.11.12 |
const 위치에 따른 동작 (0) | 2010.11.12 |
함수 포인터 (0) | 2010.11.11 |
C++ 파일 입출력 (0) | 2010.10.27 |