기타 연산자 - 2
㉠ 관계 연산자
관계 연산자는 조건 판단 등의 관계(>, <, = 등)를 판정하는 것으로 다음과 같은 종류가 있다.
연산자 | 기 능 | 우선 순위 |
> | 크다 | 1 |
>= | 크거나 같다 | 1 |
< | 작다 | 1 |
<= | 작거나 같다 | 1 |
== | 같다 | 2 |
!= | 같지 않다 | 2 |
/* 임의의 산술식에 관계 연산을 적용한 예제 프로그램 */
#include<stdio.h>
main()
{
char ch = 'A';
int I = 1,j = 2,k = -3;
double x = 7.23e+33,y = 0.001;
printf(" %d\n", 'C'- 15 < ch);
printf(" %d\n", -i –4 * j >= k * k);
printf(" %d\n", I < k > j);
printf(" %d\n", x - 5.555 <= x + y / 0.234);
printf(" %d\n", x < x+y);
}
㉡ 논리 연산자
논리 연산자에서는 몇 가지 조건 판단을 형성하는 것으로 &&, ||, !의 세 가지가 있다.
연산자 | 기능 | 우선순위 |
! | 부정(NOT) | 1 |
&& | 그리고(AND) | 2 |
¦¦ | 또는(OR) | 3 |
(c >= 'A') && (c<= 'Z')
!((c < 'A') || (c > 'Z'))
5. bit 연산자 : <<, >>, &, |, ^, ~
① shift 연산자(<<, >>) : 비트별로 연산자 다음에 주어진 숫자만큼 이동한다.
x << y 의 의미는 x에 저장된 데이터 비트를 y만큼 좌로 이동시키는 것입니다.
x >> y 의 의미는 x에 저장된 데이터 비트를 y만큼 우로 이동시키는 것입니다.
만약 데이터의 비트가 왼쪽(오른쪽)으로 이동하게 되면, 왼쪽(오른쪽) 끝의 최상단(최하단) 비트 자리에 있는 데이터는 다음 자리에 있는 데이터가 들어오기 때문에 없어지고 오른쪽(왼쪽) 끝자리에 0이 채워집니다.
좌/우 이동 연산자(<<, >>)를 사용할 때 주의할 점은 이동 연산자의 좌측에 있는 피연산자 x는 항상 정수형이어야 하고, 우측에 있는 피연산자 y는 양의정수형이어야 합니다. 그리고 y의 정수 값은 x의 비트 크기를 넘어서는 안 됩니다.
/* 여백문자, 알파벳 대/소문자, 숫자의 수를 세는 프로그램 */
#include<stdio.h>
main()
{
char ch;
int alpa_count = 0, digit_count = 0,
white_count = 0, other_count = 0;
printf("Input number of characters : ");
while((ch = get char()) ! = EOF)
{
if(ch == '' || ch == '\n' || ch == '\t')
white_count++;
if(ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z')
alpa_count++;
if(ch >= '0' && ch <= '9')
digit_count++;
}
printf("There are %d whitespace characters.\n", white_count);
printf("There are %d alphabet characters.\n", alpa_count);
printf("There are %d digit characters.\n", digit_count);
}
(10001010) == ~ (01110101)
(11010101) & (01101101) == (01000101)
mask = 6;
flag = flag & mask;
실행 과정은 각자 2진수로 표현하여 알아보기 바랍니다.
/*비트 단위 논리 연산자(~, &, |, ^)를 이용한 마스크, 비트 켜기/끄기, 반전(toggle)의 예 */
#include<stdio.h>
main()
{
unsigned char flag, mask;
flag = 103; mask=6;
printf("flag = %#0x, flag & mask = %#0x\n", flag, flag & mask);
flag = 6; mask = 48;
printf("flag = %#0x, flag | mask = %#0x\n", flag, flag | mask);
flag = 103; mask =255;
printf("flag = %#0x, flag ^ mask = %#0x\n", flag, flag ^ mask);
flag = 103; mask = 6;
printf("flag = %#0x, flag & ~mask = %#0x\n", flag, flag & ~ mask);
}
0 댓글