저번에는 변수에 대해서 알아봤습니다.
이번에는 연산자에 대해 알아보겠습니다.
사용예시는 아래에 있습니다.
연산자
연산자란 프로그램 내에서 데이터를 처리하고 조작하기 위해 사용되는 특수 기호입니다.
변수 값을 변경 , 비교, 논리 연산을 수행하는데 사용할 수 있으며
연산자에는 우선순위와 결합 규칙이 존재합니다.
산술 연산자
더하기(+), 빼기(-), 곱하기(*), 나누기(/), 나머지(%)
와 같은 기본 수학 연산이 포함됩니다.
비교 연산자
두값을 비교하여 결과를 true or false로 반환하는 연산자입니다.
==: 같음
!=: 다름
>: 크다
<: 작다
>=: 크거나 같음
<=: 작거나 같음
논리 연산자
여러 조건을 결합하여 true or false로 반환하는 연산자입니다.
&&: 논리 AND (모든 조건이 true여야 true) 예 ) a가 ture b가 1이여야 false , 둘중 하나라도 false 이면 false
||: 논리 OR (하나 이상의 조건이 true면 true) 예 ) a가 ture b가 0 이여도 false , 둘다 false 일 경우 false
!: 논리 NOT (조건의 반대 값 반환) 예 ) a가 true 면 false , a가 false 면 true
대입 연산자
변수에 값을 할당할때 사용합니다.
=: 대입
+=, -=, *=, /=, %=: 산술 연산 후 그 값을 다시 대입
비트 연산자
비트 단위로 데이터를 조작합니다.
이걸 이해하기 위해서는 우선 컴퓨터가 데이터를 0과 1로 표현하는 2진수로 이루어져있다는걸 알아야합니다.
예 ) 00000000 = 0 , 00000001 = 1, 00000010 = 2
즉 변수의 데이터를 2진수로 보고 데이터의 2진수 값을 변경 해주는 연산자입니다.
&: 비트 AND
|: 비트 OR
^: 비트 XOR
~: 비트 NOT
<<: 왼쪽 시프트
>>: 오른쪽 시프트
사용예시
변수에 선언법은 전에 말한 것처럼
변수 변수명 대입 변수값;
int a = 1; 이렇게 선언됩니다.
그러면 이변수를 사용할 때는 어떻게 사용하느냐에 대해 알아 볼 수 있습니다.
변수를 선언했다면
변수를 따로 적지 않아도 그건 그대로 해당 변수로 저장되어있습니다.
즉 a는 그대로 int 인 것 입니다.
변수의 값은 변경이 될 수 있습니다. 나중에 배울 const(상수)가 되어있지 않다면요
변수의 값을 변경하려면
a = 5;
기본적으로 이런식으로 변경됩니다. 하지만 우리가 전부 변수값을 알고 있다는 전제여야 됩니다.
그러면 a에 만약 b라는 값에다가 더하기 혹은 곱하기 등을 해서 사람이 계산하기에는 힘든 변수값을 저장하려면
어떻게 할까요
int b = 3; // 편하게 b를 선언합니다.
a = b * 5;
이런식으로 하면 a에는 b 를 5곱한값으로 변하게 됩니다 즉 처음에 선언했던 a의 값 1이아닌
a값은 b의 값 3을 5곱한값 즉 3 * 5 = 15 , a 는 15가 됩니다.
이렇게 산술 연산자는
a = b + n; 이라는 방식으로 a의 값을 변경해주는 연산자입니다.
비교연산자는
int a = 1;
int b = 2;
일때
bool c = a == b; // bool변수로 반환시키기 때문에 bool변수를 선언해줬습니다.
a가 만약 b와 같다면? true 아니라면 false 가 됩니다.
다른 비교 연산자도 마찬가지로 비교 하고 맞다면 true 아니면 false 를 반환하는 방식입니다.
논리 연산자는 아까 적은 것처럼
bool a = true;
bool b = false;
bool c = a && b; // false (둘 중 하나가 false)
이런식으로 "조건"을 결합하여 맞는 지확인합니다.
비트 연산자는 컴퓨터가 데이터를 2진수로 보기 때문에
int a = 15; // 00001111 (2진수)
int b = 20; // 00010100 (2진수)
int resultAnd = a & b ;
이렇게 두개의 변수를 비교할 경우는
두 2진수의 값중에서 서로 1인 경우에만 true이므로 true (1)
00001111
00010100
--------------
00000100
resultAnd의 값은 00000100의 십진수인 4가 됩니다.
int resultNot = ~a;
처럼 변수를 비교하는게 아닌 변수값만 변경 하는 경우도 있습니다.
00001111
-------------
11110000
반대값으로 변경이니 00001111 을 11110000이렇게변경시켜주고 십진수로 하면 15를 -16으로 변환시켜줍니다.
여기서 맨앞1이 붙는다면 - 즉 음수가 됩니다. 음수가되면 왼쪽부터 1이 생성될때마다 숫자가 서서히 오릅니다.
이유는 아래에 설명하겠습니다.
왜 2진수를 사용하고 왜 00000000을 사용하는지 알려드리겠습니다.
여기선비트와 바이트 그리고 컴퓨터 메모리에 대해 알아야합니다.
비트는 정보의 가장 작은 단위로 0또는 1의 값을 가집니다.
바이트는 8비트 의 값으로 구성됩니다. 즉 1바이트는 8비트입니다.
즉 0이 8개인 이유는 1바이트여서 그렇습니다.
메모리는 비트와 바이트 단위로 구성되며 , 보통 바이트단위로 데이터를 읽고 쓴다고 합니다.
이러면 전에 배웠던 변수에서 int가 32비트라고배웠습니다.
그러면 0이 몇개여야되냐?
네 그렇습니다.
0이 총 32개로 늘어납니다.
32 / 8 = 4이므로
4바이트가 되겠네요
00000000 00000000 00000000 00000000
그래도 이해하기 편하게 1바이트씩 나누었다고생각해야 할 것 같습니다.
그런데 이 2진수를 안쓰는 코드들도 있는데 왜 사용하는지 의문이 들었습니다.
그래서 알아보니
사용하는 이유 간단하게 좋아서입니다.
효율성 , 메모리 절약 이 되어서 좋다고합니다.
여기서 말하기에는 글이 길어지니 간단하게 생각해보면
컴퓨터는 2진수인데 사람이 10진수 혹은 string등 2진수가 아닌걸 2진수로 만드는 것보다
2진수를 "변환" 과정 없이 그냥 사용한다면 더 빠를 것 같습니다.
일을 1개하냐 2개하냐 차이같아요
게임 개발자라는 것은 게임을 만드는 것이라 생각합니다.
비트연산자는 그 게임을 좀더 효율성 있게 만든다고 생각하면 마음이 편하네요.