나미/C

21. 비트연산자

규남 2013. 3. 25. 17:02
반응형

비트연산자

 

연산자  기능  수식  수식의 의미 
논리곱  a&b  a와 b의 논리곱 
논리합  a|b  a와 b의 논리합 
베타적 논리합  a^b  a와 b의 베타적 논리합 
~(틸트)  비트반전  ~a  a의 각 비트를 반전
<<  좌측이동  a<<b  a를 b만큼 좌측으로 이동 
>>  우측이동  a>>b  a를 b만큼 우측으로 이동

 

172와 106으로 예시

 

&&와 &의 차이

172 && 106 = 1 의 결과값이 나온다 이것은 단순히 앞에서 설명했듯이 참(1)과 거짓(0)만 구별하는 논리식

 

172 & 106 = 40 이라는 결과값이 나오게 된다. 좀더 자세히 알아보자.

 

172 => 1010 1100 2진수

106 => 0110 1010 2진수

 

1 0 1 0 1 1 0 0        >        172

&   0 1 1 0 1 0 1 0        >        106

ㅡㅡㅡㅡㅡㅡㅡㅡㅡ

0 0 1 0 1 0 0 0        >        40        

둘다 1이 되는 값은 (1) 이외에 나머지는 모두 (0)으로 계산한다.

 

 

 

172 | 106 = 238 이라는 결과값이 나오게 된다. 좀더 자세히 알아보자.

 

 

1 0 1 0 1 1 0 0        >        172

|     0 1 1 0 1 0 1 0        >        106

ㅡㅡㅡㅡㅡㅡㅡㅡㅡ

1 1 1 0 1 1 1 0        >        238        

둘다 0이면(0) 이외에 하나라도 1이 있으면 모두(1)으로 계산한다.

 
 

 

172 ^ 106 = 198 이라는 결과값이 나오게 된다. 좀더 자세히 알아보자.

 

 

1 0 1 0 1 1 0 0        >        172

^    0 1 1 0 1 0 1 0        >        106

ㅡㅡㅡㅡㅡㅡㅡㅡㅡ

1 1 0 0 0 1 1 0        >        198        

서로 틀리면 (1) 서로 같으면 모두 (0)으로 계산한다.

 

~ 172를 비트반전

1 0 1 0 1 1 0 0        >        172

~

ㅡㅡㅡㅡㅡㅡㅡㅡㅡ

0 1 0 1 0 0 1 1        >        -173    

172의 경우 처음 시작하는 2진수의 숫자가 1이므로 음수로 저장. unsigned를 붙여주지 않으면 1의 보수를 취해버려서 값이 -173이 나온다.(4바이트이므로 char로 casting 해줄것 )

 

172 >> 1 우측으로 한칸 이동

1 0 1 0 1 1 0 0        >        172

>>

ㅡㅡㅡㅡㅡㅡㅡㅡㅡ

  1 0 1 0 1 1 0        >        86        

오른쪽으로 한칸 이동하여서 결과값이 86이 나오게 된다. 여기서 주의해야할 점이있다. unsigned를 붙이지 않을경우 음수의 경우는 앞에 비어있는 칸에 1이 채워질수 있으므로 정확히 해야한다.

 

 

 

 

※ 비트연산자는 char, int 형은 되지만 float형은 지원하지 않는다 .

    사용하고 싶다면 반드시 casting해서 사용해야 한다.

 

728x90
반응형