Skip to content
Snippets Groups Projects
Commit 68ace8a1 authored by 이소현's avatar 이소현
Browse files

Update README.md

parent b59971fb
No related branches found
No related tags found
No related merge requests found
......@@ -258,3 +258,74 @@ int main()
>> * signed일때에는 0을 채운다.
* 따라서 변수 선언 타입이 signed인지, unsigned 인지에 따라 같은 값도 다르게 출력된다.
## lesson05
1. x86-64 뜻
>> x86 : cpu가 intel cpu
>> 64 : intel cpu를 위한 64bit
> * intel에서는 8086칩, 80486칩, 80586칩 등이 있다.
2. gcc시 작동원리
> 1. cpp 가 돈다.
>> * 이때 cpp 는 C pre process의 약자이다.
> 2. gcc 컴파일러가 돈다.
> 3. ld (로더)가 돈다.
> 4. 뭉쳐서 a.out이 생성된다.
3. signed와 unsigned
> * signed는 일반 int 선언시 기본적으로 선언되는 타입이며 %d등으로 정수를 할당받는다.
> * unsigned는 %u 로 정수를 할당받는다.
> * 음수를(signed) %u로 할당받아도 에러가 나지 않고, integer를 unsigned integer로 바꾼 것과 같아진다.
> * signed를 unsigned에 할당하여 출력하게 되면 표현방법만 달라진다.
> * ### 따라서 signed로 받든 unsigned로 받는 같은 수를 입력시에는 두 수의 bit 데이터는 같다. 그저 표현할때 달라질 뿐이다. 즉, 메모리에 있는 bit입장에서 보면 바뀐게 없고 signed integer를 unsigned integer로 바꿀때 아무것도 하지 않는다.
따라서 아래의 코드를 살펴보면
```C
#include <stdio.h>
int main()
{
signed int siA;
unsigned int unA;
fscanf(stdin, "%d", &siA);
fprintf(stdout, "Signed Integer : %d\n", siA);
unA = siA;
fprintf(stdout, "Unsigned Integer : %u\n", unA);
fprintf(stdout, "Unsigned Integer percent d : %d\n", unA);
fprintf(stdout, "Signed Integer percent u : %u\n", siA);
}
```
>* unsigned 를 %d 로 출력한 값과 signed를 %d로 출력한 값은 표현이 같다.
>* signed를 %u로 출력한 값과 unsigned를 %u로 출력한 값은 서로 표현이 같다.
>* 따라서 그냥 %u와 %d의 표현 차이일뿐 내부 bit 데이터는 같다는 것을 확인 할 수 있다.
* signed에 큰 양수를 넣어 오버플로우가 일어나면 음수가 되어 나온다. 따라서 signed와 unsigned 사용시 조심해서 사용해야한다.
* unsigned int는 양수를 나타내지만 unsigned int를 더해도 숫자가 줄어들수도 있다! - 아래의 코드를 예로 살펴보면
```C
#include<stdio.h>
int main()
{
signed int siA;
unsigned int unA;
signed int sumS;
unsigned int sumU;
fscanf(stdin, "%d", &siA);
fprintf(stdout, "Signed Integer : %d\n", siA);
unA = siA;
fprintf(stdout, "Unsigned Integer : %u\n", unA);
fprintf(stdout, "Unsigned Integer percent d : %d\n", unA);
fprintf(stdout, "signed Integer percent u : %u\n", siA);
sumS = siA + unA;
sumU = siA + unA;
fprintf(stdout, "sumS %%d %d\n", sumS);
fprintf(stdout, "sumS %%u %u\n", sumS);
fprintf(stdout, "sumU %%d %d\n", sumU);
fprintf(stdout, "sumU %%u %u\n", sumU);
}
```
* 해당 코드 실행시 음수인 -100을 siA에 대한 input값으로 넣어 sumS와 sumU에 관한 결과를 살펴보면 두 값은 %d로 출력했을 때 모두 -200이 나왔고 %u로 출력했을 때 모두 4294967096이 나왔다.
* 분명 unA는 unsigned 값인데 -100인 siA값에 unA를 더하자 값이 줄어 -200이 된 것을 확인 할 수 있다.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment