본문 바로가기

개발/C&C++

(C/C++ 속성 정리) 7일 차 : 바이트의 저장순서 및 별찍기

안녕하세요 넬다이 입니다.

 

오늘은 7일 차 정리가 되겠습니다!!!!

 

오늘은 바이트의 저장 순서 및 반복문의 복습 겸 해서 별 찍기를 진행해보겠습니다.

 

저번 시간에도 말씀드린 듯이 반복문은 중요한 문법이기 때문에 다시 한번 알아보는 시간을 가질까 했어요!!!! 

그러니 여러분들도 파이팅해주세요!!


바이트의 저장 순서

일반적으로 우리가 메모리 주소를 보면 16진수로 되어 있는 것을 볼 수 있다.

바이트의 저장 순서를 영어로 엔디안이라고 한다.

int	iTest = 0x12345678;

char*	pTest = (char*)&iTest;

for(int i = 0; i < 4; ++i)
{
	printf("%x", pTest[i]);
}

위에 코드를 실행하게 되면은

이러한 결괏값이 나오게 된다.

반복문을 통해 char 단위로 즉 1바이트 단위로 출력을 해 보았을 때 78563412 가 나오는 것을 볼 수 있다.

 

그 이유는 cpu마다 바이트에 저장하는 방식이 다르기 때문이다.
메모리에 어떤 것이 할당될 때, 바이트가 어떠한 순서로 저장되는가를 나타내는 말이다.

 

저장을 하게 되면은 

빅 엔디안
12 34 56 78
----->>>>  정방향 순서대로

 

리틀 엔디안
78 56 34 12
<<<<------ 역방향 순서대로

저장을 하게 된다.

 

예시로 바이트의 값이 0x1234 이러하다면은

 

리틀
34 12 00 00 
34 12 까지만 읽고 00이라 읽지 않는다.

 


00 00 12 34
끝까지 다 읽어야 되는 점이 있다.

 

그렇다면 장점들을 파악해볼 텐데요! 장점은

리틀 엔디안 방식이 산술 연산이 더 빠르고 빅 엔디안 방식은 논리 연산이 더 빠르다고 합니다.
빅 엔디안은 대소 비교가 빠르다.

 

두 방식 모두 장단점이 있으므로 어느 쪽이 좋다고 하는 것은 무의미하다.

 

바이트 저장 방식을 알아야 하는 이유는 네트워크 프로그래밍에서 패킷을 16진수로 보내는데
각 방식에 따라서 읽는 순서가 달라야 하므로 알아두면 좋기 때문이다.


별짓기

이번에 해볼 것은 별짓기인데요 저번 시간에 정리했던 반복문을 활용해서

별 모양을 가지고 여러 모양을 만드는 시간입니다.

정답 코드는 바로 적어둘 거예요 그래도 여러분들은 꼭 한 번씩 정답을 보지 말고 꼭 해보시길 부탁드립니다.

 

첫 번째 문제

*
**
***
****
*****

는 이런 모양을 만드는 거예요! ㅎ

 

정답

for(int i = 0; i < 5; ++i)
{
	for(int j = 0; j <= i; ++j)
	{
		cout << "*";	
	}
	cout << endl;
}

 

두 번째 문제

*****
****
***
**
*

 

정답

for(int i = 0; i < 5; ++i)
{
	for(int j = 5 - i; j > 0; --j)
	{
		cout << "*";
	}
	cout << endl;
}

 

3번째 문제

    *
   **
  ***
 ****
*****

정답 이번에는 위와 같은 방식이 아닌 continue를 이용해서 구현해봤어요

int iCount = 4;
for (int i = 0; i < 5; ++i)
{
	if (iCount > i)
	{
		cout << " ";
		--iCount;
		--i;
		continue;
	}
	iCount = 4;
	for (int j = 0; j <= i; ++j)
	{
		cout << "*";
	}
	cout << endl;
}

 

4번째 문제

*****
 ****
  ***
   **
    *

정답

int iCount = 0;
for (int i = 0; i < 5; ++i)
{
	if (iCount < i)
	{
		cout << " ";
		++iCount;
		--i;
		continue;
	}
	iCount = 0;
	for (int j = 5 - i; j > 0; --j)
	{
		cout << "*";
	}
	cout << endl;
}

이렇게 4개의 문제의 대해서 풀어봤는데요

 

이렇게 끝나면은 아쉬우니깐 간단한 숙제를 남겨드리겠습니다.

 

어려운 건 아니고 

    **
   ****
  ******
 ********
**********

**********
 ********
  ******
   ****
    **

 

이런 모양을 만들면 됩니다 정답은 댓글로 남겨주시면 제가 답변 꼭 드리겠습니다

 

자 오늘은 이렇게 바이트의 저장 순서와 별짓기에 대해서 알아봤는데요

별짓 기는 복습이기 때문에 어려운 내용은 아니라고 생각합니다.

 

여러분들도 머릿속에 있는 특정 모양을 직접 이제까지 배운 내용을 토대로 직접 해보시길 추천드립니다!

 

그럼 이만 오늘 속성 정리를 마치겠습니다 ㅎㅎ 그럼 이만!.

 

[개발/C&C++] - (C/C++ 속성 정리) 6일 차 : 반복문(for , while)

[개발/C&C++] - (C/C++ 속성 정리) 5일 차 : 난수

[개발/C&C++] - (C/C++ 속성 정리) 4일 차 : 분기문 (숙제 있어요)

[개발/C&C++] - (C/C++ 속성 정리) 3일 차 : 연산자

[개발/C&C++] - (C/C++ 속성 정리) 2일 차 : 자료형 타입과 표현 범위 및 변수 선언

[개발/C&C++] - (C/C++ 속성 정리) 1일 차 : 주석, cout,cin은 무엇인가?