728x90

디지털논리회로에서 많이 본 연산자??

 

 

AND 연산 (&)

AND연산의 규칙(논리표르 보면)

 

1 & 1 -> 1

1 & 0 -> 0 

0 & 1 -> 0

0 & 0 -> 0

AND(&)연산에서는 피연산자가 0이기만 하면 또는 0만 만나기만 하면 0으로 되버리는 성질이...다르게는 1끼리 &연산이되면 그대로 아무일 없듯이 1이 그대로 출력되는 성질이...

 

원하는 값을 출력하기위해 변환하기위한 용도 또는 검증하는 용도로..??

 

1010 & 0011 각 자리 연산

위와 같이 한자리 한자리 각각 AND 연산하여, 위에 써 놓은 규칙대로 연산이 됩니다. 만약 두 숫자의 자리수가 맞지 않을 경우, 예를들어 1111100 과 11 을 AND 연산 할 때 에는 11 앞에 0 을 추가하여 자리수를 맞추어 줍니다. 즉, 1111100 과 0000011 의 연산과 같습니다.

 

 

OR 연산 (|)

 

 

1 | 1 -> 1

1 | 0 -> 1 

0 | 1 -> 1

0 | 0 -> 0

1에 관대한 1에 포함적인 OR연산 웬만하면 1로 변환해주고 싶은데 출력해주고 싶은데

다만 둘다 0이면 어떻게 해줄 수 가 없네.. 

 

 

XOR 연산 (^)

1 ^ 1 -> 0

1 ^ 0 -> 1

0 ^ 1 -> 1

0 ^ 0 -> 0

같은면 안되...달라야 참이된다

 

 

<< 연산 (쉬프트 연산)

a << 1

쉬프트 시, 만일 앞에 쉬프트된 숫자가 갈 자리가 없다면, 그 부분은 버려집니다. 또한 뒤에서 새로 채워지는 부분은 앞에서 버려진 숫자가 가는 것이 아니라 무조건 0 으로 채워집니다.

 

 

>> 연산 (*주의  '<<연산' 과 비교)

위와 같은 종류로 이는 << 와 달리 오른쪽으로 쉬프트 해줍니다. 이 때, 오른쪽으로 쉬프트 하되, 그 숫자가 갈 자리가 없다면 그 숫자는 버려집니다. 이 때, 무조건 0 이 채워지는 << 연산과는 달리 앞부분에 맨 왼쪽에 있었던 수가 채워지게 되죠. 예를들어서 11100010 >> 3 = 11111100 이 되고, 00011001 >> 3 = 00000011 이 됩니다.참고로 어떤 시스템에서는 >> 쉬프트의 경우에도 무조건 맨 왼쪽에 0 이 채워질 수 있습니다.

 

int 형 변수의 크기를 나타내는데 4 바이트라고 되어 있군요. 맞습니다. int 형 변수는 하나의 데이터를 저장하기 위하여 메모리 상의 4 바이트 - 즉 32 비트를 사용합니다. (1 byte = 8 bits) 아까, 하나의 비트가 0 과 1 을 나타낸다고 했으므로 (즉 1 개의 비트가 2 진수의 한 자리를 나타내게 되죠), 하나의 int 형 변수는 32 자리의 이진수라고 볼 수 있습니다. 예를들어 우리가 a = 1 이라 한 것은 실제로 컴퓨터에는 a = 00000000 00000000 00000000 00000001 이라 저장되는 것과 같게 되는 거죠.

 

즉, 우리가 int a = 0xAF; 라고 한 것은 a = 10101111; 이 맞지만 사실 컴퓨터 메모리 상에서는 a  int 형이기 때문에 a = 00000000 00000000 00000000 10101111 (10101111 앞에 0 이 24 개 있다) 이라 기억하는 것이 됩니다. 따라서, 이 숫자를 반전 시키게 되면 a = 11111111 11111111 11111111 01010000, 즉 0xFFFFFF50 이 되는 것이지요. 마찬가지로 생각해 보면,

 

printf("%x \n", a << 2);  // a << 2 = 1010111100
printf("%x \n", b >> 3);  // b >> 3 = 00010110

이 두 문장도 사실은 각각 0000 0000 0000 0000 0000 0000 1010 1111  0000 0000 0000 0000 0000 0000 1011 0101 을 쉬프트 연산한 것과 같습니다. 따라서 a 의 경우 0000 0000 0000 0000 0000 0000 1010 1111 을 왼쪽으로 2 칸 쉬프트 하면 0000 0000 0000 0000 0000 0010 1011 1100 이 되어 0x2BC 가 됩니다.

 

b 의 경우 마치 앞에 1 이 있는 것 같지만 실제로는 int 형 데이터에 저장되어 있으므로 4 바이트로, 0000 0000 0000 0000 0000 0000 1011 0101 이므로 맨 왼쪽의 비트는 0 입니다. 따라서 쉬프트를 하게 되면 왼쪽에 0 이 채워지면서 0000 0000 0000 0000 0000 0000 0001 0110 이 되어 0x16 이 됩니다.

 

 

 

 

연산자 우선순위

+ Recent posts