본문 바로가기
프로그래밍/C

연산자(2)

by leestun 2020. 7. 16.
반응형

[비트 논리 연산자]

and  &  두 비트가 모두 1일때 결과 1

or    |    두 비트중 하나라도 1이 있으면 결과 1

xor  ^   두 비트가 서로 다를 때만 결과 1

not  ~   비트가 1이면 0이고, 0이면 1

 

<and>

11 = 1011(2)

5  =  0101(2) &

-----------------

       0001(2) = 1

 

<or>

11 = 1011(2)

5  =  0101(2) |

-----------------

       1111(2) = 15

 

<xor>

11 = 1011(2)

5  =  0101(2) ^

-----------------

       1110(2) = 14

 

<not>

~11 = 0100(2) = 4

~5  = 1010(2) = 10

 

*not 연산 시 예상한 결과가 나오지 않는 이유

우리가 사용한 bit의 갯수: 4개

컴퓨터가 사용하는 bit의 갯수: 64개

 

*not 연산을 했을 때 결과값은 어떻게 계산해야 할까?

 

<not 연산 계산 공식>

~a = -a-1

 

왜 ~양수 = 음수, ~음수 = 양수

 

컴퓨터는 음수를 저장할 수 없기 때문에 음수를 표현하는 약속이 있다.

-비트를 사용하여 부호를 표현하는 방법

최상위 비트 = 부호비트 라고 한다.

부호비트가 0이면 양수

부호비트가 1이면 음수로 표현한다.

 

~11 = -12

~-12 = 11

 

1) -12의 4bit 표현방법 구하기

2) -12의 4bit not 연산시 11이 나오는것 확인

 

    12 1100

+(-12)0100

   ----------

      0 0000

 

  -12: 0100(2)

~-12: 1011(2) = 11

 

#include <stdio.h>

int main() {

int x = 11;

int y = 5;

int z = -3;

printf("x&y:%d\n",x&y);

printf("x|y:%d\n", x | y);

printf("x^y:%d\n", x ^ y);

printf("~x:%d\n", ~x);

printf("~y:%d\n", ~y);

printf("~z:%d\n", ~z);

printf("y<<1:%d\n", y << 1);

printf("y>>1:%d\n", y >> 1);

return 0;

}

실행결과

 


[비트 쉬프트 연산자]

shift: 이동

왼쪽 쉬프트: <<

오른쪽 쉬프트: >>

 

5<<1 : 1010(2) = 10

이동하다가 더이상 올 bit가 없을 경우, 0으로 채워짐

*왼쪽 쉬프트 연산은 1칸당 x2의 연산과 동일

 

5>>1 : 0010(2) = 2

 

오른쪽 쉬프트 연산은 1칸당 /2의 연산과 동일

 

우리가 비트연산을 알아야 하는 이유?

비트연산 = 컴퓨터가 하는 연산

컴퓨터의 연산으로 명령을 내려준다면, 대용량의 데이터 연산을 할 땐 성능의 차이가 있기 때문이다.


[관계 연산자], 비교연산자

연산의 결과가 참, 혹은 거짓으로 나온다

A = 2

B = 3

 

A<B A가 B보다 작은가

A>B A가 B보다 큰가

A<=B A가 B보다 작은거나 같은가

A>=B A가 B보다 크거나 같은가

A==B A와 B가 같은가

A!=B A와 B가 같지않은가

 

<실습>관계연산자.c

*문자열은 ==를 사용해서 같은지 비교할 수 없다.

 

 

실행 결과

<string.h> : 문자열과 관련된 기능 포함

*문자열이 같은지 비교하는 기능

strcmp(문자열1, 문자열2);

문자열1과 문자열2가 같으면 0

다르면 -1 또는 1이 나옴


[논리연산자]

논리값으로 연산을 하는 연산자

논리연산자

and 두 값이 모두 참일 때 결과 참

or 두 값중 하나라도 참이면 결과 참

not 참 -> 거짓, 거짓 -> 참(부정)

and &&

or ||

not !

<실습>논리연산자.c

식+식

논리값:0,1

 

논리값 연산자 논리값

관계식 연산자 관계식

 

우선순위:논리연산자 < 관계연산자

 

실행화면


[대입연산자]

변수 = 값; 

값을 왼쪽의 변수에 저장을 한다

 

변수 = 식;

int x = 2+3;

 

int y = 3;

y = y+10;

오른쪽 y에 3을 넣고 10을 더한 후 왼쪽의 y에 저장을 한다.

 

int y = 3;

y = y+10;


[복합대입연산자]

산술연산자,대입연산자를 복합적으로 사용

y+=10; //y = y+10;

연산 순서대로 연산자 적기

 

y+=10; : y에 10을 누적시킨다.

 

[증감연산자]

기존 변수의 값에 1을 증가시키거나, 1을 감소시키는 연산자

++

--

후위형: y++; //y+=1;

전위형: ++y; //y+=1;

 

후위형: 값의 증가가 마지막에 연산

전위형: 값의 증가가 먼저 연산

 

반응형

'프로그래밍 > C' 카테고리의 다른 글

제어문-반복문  (0) 2020.07.21
제어문- 조건문  (0) 2020.07.18
입력함수, 연산자  (0) 2020.07.15
출력함수,변수, 자료형  (0) 2020.07.14
프로그래밍 기초  (0) 2020.07.14