c++

c++ 공부

이야기prog 2025. 2. 27. 20:59
// CPP_1.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다.
//

#include <iostream>

// float 4byte 1byte 부호 8byte(지수) 23byte(유효숫자) 
// 0b11 + 0b0.011 = 0b11.011 = 0b1.1011 * 2^1 정규화시 기수는 반드시 1이여야 함 즉 1.xxx 꼴
// 지수는 unsigned로 +127해야함 
// 0100 0000 0101 1000 0000 0000 0000 0000 = 0x 40580000 
float fa = 3.375f; // 0x40580000

// double 8byte 1byte 부호 11byte(지수) 52byte(유효숫자)
// 0b11 + 0b0.011 = 0b11.011 = 0b1.1011 * 2^1
// +1023 0100 0000 0000 1011 0000 0000 = 0x400B000000000000
double da = 3.375;
int main()
{
    std::cout << "Hello World!\n";
}

부동소수점을 간단하게 공부하였다.

 

#include <iostream>

enum class tmp : uint8_t {
	RED = 0x00,
	BLUE = 0x01,
	ORAGNE = 0x10
};

struct Player {
	int hp;
	int tmp;
};

void tmp(Player& a);
void tmpPtr(Player* a);

void str(char[]);
int main() {
	//Player t;
	//tmp(t);

	//tmpPtr(&t);
	const char* a = "Hello World"; // .rodata의 "Hello World"의 첫 주소를 가리킴
	char b[] = "Hello World"; // stack메모리에 b라는 char의 배열이 "Hello World"를 복사해온 값을 가지고 b는 그 첫번째 주소를 가리킴 
	/*
00007FF7BF554D2F  lea         rax,[string "Hello World" (07FF7BF55AC10h)]  
00007FF7BF554D36  mov         qword ptr [a],rax  a의 값은 바로 .rodata의 "Hello World"의 첫번째 주소

00007FF7BF554D3A  lea         rax,[b]  b의 주소를 rax에 저장
00007FF7BF554D3E  lea         rcx,[string "Hello World" (07FF7BF55AC10h)] "Hello World"의 주소를 rcx에 저장  
00007FF7BF554D45  mov         rdi,rax  rdi는 b의 주소
00007FF7BF554D48  mov         rsi,rcx  rsi는 "Hello World"의 주소
00007FF7BF554D4B  mov         ecx,0Ch  ecx = 카운터 값에 12 대입
00007FF7BF554D50  rep movs    byte ptr [rdi],byte ptr [rsi]  rep movs는 카운터 값만큼 복사 수행
	*/
	str(b);
	return 0;
}

void tmp(Player& a) {
	a.hp = 1;
	a.tmp = 1;
}
void tmpPtr(Player* a) {
	a->hp = 1;
	a->tmp = 1;
}

void str(char a[]) {
	a[2] = 'b';
}

어셈블리어로 char 포인터와 char 배열의 차이를 비교해보았다.

char 포인터는 section .rodata의 "Hello World"의 주소자체를 저장하고 

 

char 배열은 section .rodata의 "Hello World"값을 stack영역의 (main 함수 안이기 때문) char 변수에 값을 복사하여 배열을 이루고 그 첫번째 배열의 포인터값을 변수이름이 나타낸다.

'c++' 카테고리의 다른 글

c++ 공부  (0) 2025.03.01
c++ 공부  (0) 2025.03.01
c++공부  (0) 2025.02.24
c++ 어셈블리어 간단하게 공부  (0) 2025.02.22
c++ 공부  (0) 2025.02.12