-
[C언어]비트 연산자와 홀수 짝수 구분하기C언어 2019. 12. 17. 16:10
& 비트 단위로 and연산을 한다.
ex) 12&7 -> 1100 & 111 = 100 -> 4
| 비트 단위로 or 연산을 한다.
ex) 12|7 -> 1100 | 111 = 1111 -> 15
^ 비트 단위로 xor 연산을 한다.
ex) 12^7 -> 1100 ^ 111 = 1011 -> 11
<< 비트열을 왼쪽으로 이동시킨다.(한칸 이동할때마다 곱하기2의 효과)
ex) 12<<1 -> 1100<<1 = 11000 -> 24
>> 비트열을 오른쪽으로 이동시킨다(짝수의 경우 나누기2 , 홀수의 경우 1을 빼고 나누기 2)
ex) 12>>1 -> 1100>>1 = 110 -> 6
비트연산자를 이용해 if문을 사용하지 않고 홀수와 짝수를 구분하는 컴파일을 해 보았다.
#include
int main(void) {
int i;
for (i = 0; i <= 100; i++) {
while (i & 1) {
printf("%d \n", i);
break;
}
}
}for문을 이용해 0~100까지의 숫자를 받고
해당 숫자와 1을 비트연산으로 비교하여 홀수인 경우는 1 , 짝수일 경우는 0이 나온다.
( ex ) 13 & 1 -> 1101 & 1 = 1 -> 1 )
while문에서 1은 참이므로 홀수인 경우, while문 안으로 들어가 해당 숫자를 출력해준다.
break를 해주지 않으면 한번 만족한 숫자가 for문을 돌지 않고 계속해서 출력되므로, 한번만 출력할 수 있게
break를 걸어 준다.
비슷한 형식으로 while문 안에서 i 와 1 을 비교하여 0이 나오면 참으로 판단해야하기 때문에
비트 연산 비교 뒤에 ==0을 추가하여 0일때 while문이 작동할 수 있도록 하였다.
#include
int main(void) {
int i;
for (i = 0; i <= 100; i++) {
while ((i & 1)==0) {// 받아온 숫자와 1을 비교하는 부분.
printf("%d \n", i);
break;
}
}
}여기서 짝수에 0이 포함 돼 있는 것이 불편하다면 for문을 1부터 시작시키면 된다.
'C언어' 카테고리의 다른 글
[C언어]프로그래머스 "2016년" & 동적 메모리 할당이란.. (0) 2019.12.23 [C언어] 프로그래머스 1단계 "두 정수 사이의 합" (0) 2019.12.20 [C언어]scanf와 scanf_s에 대하여 (0) 2019.12.16 [C언어]#include <stdio.h>에 대하여 (0) 2019.12.13 [C언어]C언어 시작하기 (0) 2019.12.13