[C++] 시프트 연산자의 사용


값을 2진수로 변환한 뒤 연산을 진행한다

시프트 연산자는 아래와 같이 2가지가 존재한다.

기호
연산 방법
«2진수의 맨 오른쪽에 0을 하나 추가한다.
»2진수 맨 오른쪽 숫자 하나를 없앤다.


연산 예시를 들어보자.


379와 296을 연산하기 위해서 우선 두 수를 2진수로 변환한다.

  • 379 : 101111011 (2진수)
  • 296 : 100101000 (2진수)


« 연산을 실시하면?


  • 379 : 101111011은 1011110110이 되고, 10진수르 변환하면 758이다.
  • 296 : 100101000은 1001010000이 되고, 10진수로 변환하면 592이다.

여기서 « 연산을 한번 실행한 결과는 10진법에서 10을 곱한 것과 같다는 것을 알 수 있다.

» 연산을 실시하면?


  • 379 : 101111011은 10111101이 되고, 10진수르 변환하면 189이다.
  • 296 : 100101000은 10010100이 되고, 10진수로 변환하면 148이다.


시프트 연산이 사용되는 대표적인 곳은?


색상을 조정할때, argb에서 사용이 가능하다!
3D 작업에서 무조건 사용한다고 한다.

int 자료형이 4바이트 인것 기억나는가?
00000000 00000000 00000000 00000000 (1~255 4개 표현 가능)
각기 a r g b 값이다.

	const unsigned char	a = 200; // 1바이트
	const unsigned char	r = 85; // 1바이트
	const unsigned char	g = 32; // 1바이트
	const unsigned char	b = 24; // 1바이트

4바이트 메모리를 만들어서 각기 저장!

	unsigned int	color = 0;

	// 비트 단위 논리연산자를 이용하면!
	// 여기서 rgb를 계속 추가해 볼까?
	color = a;
	color = color << 8;

	color = color | r;
	color = color << 8;

	color = color | g;
	color = color << 8;

	color = color | b; // 200 85 32 24

	std::cout << color << std::endl;
	//결과 : 200 85 32 24

이렇게 하면 int 자료형 안에 1바이트 자료 4가지 값을 저장할 수 있다.


© 2022.07. by Wookey_Kim

Powered by Hydejack v7.5.2