본문 바로가기

Today I Learned

23.01.12 - 연산자2, 분기문

비트 단위 쉬프트 연산자

<< 왼쪽으로 >> 오른쪽으로 전체 비트를 이동시킨다.

왼쪽으로 비트를 1칸 이동할 때마다 값이 2배가 되고 오른쪽으로 비트를 1칸 이동할 때마다 값이 1/2배가 된다.

cout << 10 << 2; //40
cout << 10 >> 1; //5

단 비트를 이동시킬 때 왼쪽이나 오른쪽이 잘리는 것을 감안하고 계산해야 한다.

컴파일러는 뺄셈의 기능이 따로 없어 구현하기 위해 음수를 더하는 방식을 취하는데

음수를 표현하기 위해 2의 보수를 이용한다.

https://cppking.tistory.com/111

 

[C++] 음수를 비트로 표현하는 방법(2의 보수), 진법 표현

비트는 0과 1로 조합되는 데이터를 나타내는 최소 단위이다. 8비트면 -128 ~ 127까지의 정수를 표현할 수 있다. 1번째 자리부터 7번째 자리까지는 양의 정수를 표현하지만 8번째 자리의 비트가 1이

cppking.tistory.com

 

형 변환

int iA = (int)3.14f //명시적 형 변환
int iB = 3.14f // 묵시적 형 변환

형 변환은 자료형을 표기해 명시적으로, 아니면 묵시적으로도 할 수 있다.

iA와 iB는 3으로 같은 값을 가진다. 

int iA = 3;
cout << iA * 0.5f; // 1.5

이렇게  다른 자료형끼리 연산도 가능한 것도 묵시적 형 변환 때문이다.

정수형이라면 1.5에서 소수부가 잘려 1이 되겠지만 데이터의 손실을 최소화하기 위해

컴파일러가 3을 3.0의 float 형태로 묵시적으로 형 변환을 해준 것이다.

묵시적 형 변환은 컴파일러가 지원해주니까 가능한 것이고 기본적으로 명시적 형 변환을 사용하는 것이 좋다.

 

축약 연산자

+=, -=, *=, /=, %=, <<=, >>=

 

증감 연산자

++,--

증감 연산자는 피연산자의 앞에 쓰이는 경우 전위형, 뒤에 쓰이는 경우 후위형이라고 부른다.

int iA = 3;
cout << ++iA; //4
cout << iA++; //3

위 코드가 전위형과 후위형의 차이를 나타내는데,

전위형은 iA에 1을 더한 값을 리턴하기 때문에 4를 출력하고

후위형은 IA를 리턴하고 1을 더하기 때문에 3을 출력한다.

++(++iA) // (o)
(iA++)++ // (x)

위 코드는 첫줄처럼 전위형 연산자를 사용한 것은 성립하지만 후위형 연산자를 사용하는 것은 에러가 나는데,

그 이유는 첫줄에선 iA에 1을 더하고, 1이 더해진 iA는 lvalue이기 때문에 또 1을 더할 수 있지만

두번째 줄에서 iA++는 1이 더해진 iA가 아닌, iA의 값에 1을 더한 rvalue이기 때문에 우변값에 1을 더할 수 없다.

 

 

분기문

goto: 지정한 레이블로 점프한다.

	goto Jump;

	cout << 1 << endl; //(x)출력안됨

Jump:

	cout << 2 << endl; //(o)출력됨

 

if문은 생략.