프로그래밍언어/C/C++ 4

[C/C++] 포인터 (정리 및 수정 중)

== 배열과 포인터 표기법 char data[5]; data[1] = 5; *(data + 1) = 5 //data[1] =5; 와 같음 char data; char *p = &data; *p = 3; p[0] = 3; // *p=3; 과 같다. data[n] 과 *(data + n) 은 같다 ‘&‘ 주소알아내는 연산자 ’*‘ 주소가서 값 긁어와 또는 포인수변수선언시에 data[0] 에 0x12345668 에서 0x00 00 00 22로 배열의 요소를 구성하는 모든 바이트값이 다 수정됨. //그래서 좀 더 정밀하게 컨트롤 하기위해 포인터 표기법을 사용하여 포인터 포인팅 하는 의미가 ‘주소를 가리키는 것과 함께 사이즈까지 단위까지 함의’ 그래서 int * (영어로는 pointer to int인데, int형..

[C/C++] C 증감연산자 (전위prefix, 후위postfix)

/* 더하기 1 을 하는 방법 */ #include int main() { int a = 1, b = 1, c = 1, d = 1; a = a + 1; printf("a : %d \n", a); b += 1; printf("b : %d \n", b); ++c; printf("c : %d \n", c); d++; printf("d : %d \n", d); return 0; } a : 2 b : 2 c : 2 d : 2 ++c와 d++ 모두 2로 같은 값이 나왔다. /* prefix, postfix */ #include int main() { int a = 1; printf("++a : %d \n", ++a); a = 1; printf("a++ : %d \n", a++); printf("a : %d \n",..

[C/C++] 2의 보수 표현법과 정수 오버플로우

CPU 개발자라면 컴퓨터 상에서 정수 음수를 어떤식으로 표현하도록 만들었을까요? 가장 간단히 생각해보자면 우리가 부호를 통해서 음수 인지 양수 인지 나타내니까, 비슷한 방법으로 부호(sign bit)를 나타내기 위해서 1 비트를 사용하는 것입니다. (예를 들어서 0 이면 양수, 1 이면 음수) 그리고 나머지 부분을 실제 정수 데이터로 사용하면 되겠죠. 예를 들어서 가장 왼쪽 비트를 부호 비트라고 생각하자면 (참고로 아래 표현하는 수들은 모두 이진법으로 작성한 것입니다.) 0111(2)은 7(4+2+1)이 될 것이고 1111(2)은 맨 왼쪽 부호비트(sign bit)가 1 이므로 -7 을 나타내게 됩니다. 꽤나 직관적인 방식이기는 하지만 여러가지 '문제점'이 있습니다. 0000(2)과 1000(2) 둘 다..