- 당연히, 오늘 배운 내용 정리(별로 없지?)
- 특정한 수를 입력받고 and operator를 이용하여 그 수 보다 작은 짝수 중 가장 큰 짝수를 출력하라(scanf, printf 이용)
- shift operator를 이용하여 128(=2^5)을 출력하고, 128을 특정 변수(variable)에 저장하여 그 변수와 left shift operator를 이용하여 32를 출력하라
- 다음 계산의 값을 예상하라
- 1110 0111 ^ 1101 0001 = ?
- 1110 0111 | 1101 0001 = ?
- Assignment operator
- Equal sign (=) 은 Assignment operator 를 나타낸다
- 변수에게 값을 주기 위해 사용된다
- 계산 순서 : 오른쪽 -> 왼쪽
- Decrement / Increment : postfix / prefix
- Decrement는 --로, Increment는 ++로 나타낸다
- 증감값은 1
- Postfix 일 경우 변수 뒤에 Decrement/Increment operator를 사용하며 다른 계산이 끝난 후 적용된다
- Prefix 일 경우 변수 앞에 Decrement/Increment operator를 사용하며 다른 계산을 실행하기 전에 적용된다
- 축약 연산자 (Shorthand Operators)
- 계산 과정에 같은 변수가 포함되어 있을 경우 축약 연산자를 사용할 수 있다
- +=, -=, *=, /=, %=
- Ex. (A = A + B)는 (A += B ) 로 표현 가능
- 비트 연산자 (Bitwise Operators)
- 2진법으로 표현되는 Bit를 계산하여 표현
- 2진법 (Binary numeral system)
- 1과 0만을 이용해 숫자를 나타내는 방법.
- 컴퓨터에서 2진법의 1은 true, 0은 false로 나타나는 경우가 있다
- 2진수를 10진수로 바꾸려면 2진수의 자릿수에 따라 2^(n-1)을 곱해주면 된다
- 10진수를 2진수로 바꾸려면 10진수를 2로 나누어 나머지가 있다면 1, 없다면 0을 적어넣으면 된다
- Left shift : a<
- a의 모든 비트를 왼쪽으로 n 칸 옮기며, 새로 생겨난 비트는 0이 된다
- Right shift : a>>n
- a의 모든 비트를 오른쪽으로 n 칸 옮기며, 새로 생겨난 비트는 0이 된다
- And 연산 : a & b
- a와 b의 비트를 비교하여 서로 다르면 0, 서로 같다면 1로 표현한다
- Or 연산 : a | b
- a와 b의 비트를 비교하여 하나라도 1이라면 1로 표현한다
- XOR 연산 : a ^ b
- a와 b의 비트를 비교하여 서로 다르다면 1, 서로 같다면 0으로 표현한다
- 1's complement : ~a
- a의 비트를 모두 반전시킨다 : 1->0, 0->1
- 2's complement
- Bit 계산으로 음수를 표현
- A를 -A로 나타내려면, A의 비트를 1's complement로 반전시킨 후 1을 더해주면 된다
#include <stdio.h>
int main ()
{
int num ;
int temp1 ;
printf ("enter a number : ");
scanf ("%d", &num);
temp1 = num & 1 ;
if (temp1 == 1) {
printf ("%d\n", num - 1);
}
else if (temp1 == 0) {
printf ("%d\n", num - 2);
}
return 0;
}
#include <stdio.h>
int main ()
{
int num = 1 ;
num = num<<7;
printf ("%d\n", num);
int num2 ;
num2 = num ;
num2 = num2>>2;
printf ("%d\n", num2);
return 0;
}
- 1110 0111 ^ 1101 0001 = 0011 0110
- 1110 0111 | 1101 0001 = 1111 0111