뭔가에 취해 노래를 만들어 봤다.

물론 Intro 뿐이지만....

노래제목은 이걸로 할라고 한게 아니였는데.... 어쩌다 보니...

Metallica 의 Die Die My darling 과 비슷해진듯...

녹음은 생각보다 잘 된것 같지만, 역시 기타는 연습이 많이 필요한듯...

학점과 기타 실력과의 상관관계는 반비례라는 것....

기타실력이 늘었다고 생각되면, 학점은 바닥을...
Mac OS Skin 을 XP SP3 에 씌워 보았다.

방법은 간단하다. Leopard XP 실행파일을 다운받아서 실행하면 된다.

Mac OS 분위기 나고 나름 괜찮은거 같다.

한가지 유의할 사항은 SP3 에서 Leopard XP 를 설치할때는 그 전에 Uxtheme SP3 버전을 설치해놓아야 한다는 것이다.

Leopard XP 가 SP3 용 UxTheme 을 설치하지 않아서 작업표시줄을 바꾸질 못한다....

그럼 Leopard XP 는 어디에 있을까.... google 에 물어보면 나온다. 물론 Uxtheme SP3 버전도 google에 물어보시라...
데스크탑으로 리눅스도 꽤 쓸만해 졌다.

아직까지 Windows XP 에 많이 밀리지만, 그래도 옛날 Redhat 6.x 에 비하면 많이 좋아졌다.

Redhat 6.x vs Windows 95 는 Windows95 가 많이 편하다고 할수 있었지만,

Fedora 9 vs Windows XP 는 XP 가 약간 앞서는 정도(?) 인것 같다.

아래 스크린샷은 본인이 사용하는 Fedora 9 바탕화면이다.
사용자 삽입 이미지

테마도 꽤 쓸만한게 많아졌다.

요즘 Ubuntu 가 대세라지만 본인은 Alzza 6.x 부터 쭉 Redhat 계열만 사용해봤기 때문에 Fedora 를 사용하고 있다.

아직 많은 Application 이 MS Windows 에 종속적이지만, 리눅스가 데스크탑으로 쓰기에 점점 좋은 세상이 되어져 가는 것 같다.

64bit OS 로 놓고 본다면...
거의 48 대 52 정도(?) 로 Vista 가 앞서지 않을까 추측해본다.

VC++ 에서는 win32 라이브러리인 winsock 을 사용할 수 있다.
MS 에서 제공하는 CSock 이란 놈도 역시 사용할 수 있다.

하지만 VC++ 에서 #include <winsock2.h> 만 하면 링크 에러가 난다.

그리하여 이를 해결하기 위해서는 옵션에서
ws2_32.lib 파일을 넣어주어야 한다.

그렇다면 어떻게?

VC++ 6.0 에서

Project->Settings

Project -> Settings or Alt+F7

사용자 삽입 이미지
Link Tab 에서 Object/library modules 란에 ws2_32.lib 을 적어준다


아니면 소스코드에
#pragma comment(lib,"ws2_32.lib") 를 추가해 준다.


그리고 컴파일하면 끝!
사용자 삽입 이미지

리눅스용 Vi 도 있지만 윈도우즈용 gVim 이란 녀석도 있다.

아직 사용법은 잘 모르지만, 왠지 이 녀석의 포스가 느껴진다.

명령어도 많고 기능이 많지만, 틈틈이 내가 쓸 기능만이라도 정리해 봐야 겠다.

이제 블로거들이 상당히 늘어난거 같다.

블로그란 얘기를 들은지가 한 2년정도 된거 같은데...

난 티스토리가 거의 생길때 잽싸게 가입을 해서 초대장 이런것 필요 없었지만...

티스토리의 인기가 상승함에 따라 내 아이디가 왠지 잘린것 같은 불길한 예감이 들어

주저리주저리 글 하나 쓴다.

마지막 포스팅 이후 8개월만에 쓰는 헛소리 끝

페도라 코어7 에 베릴설치하고 Vista 테마도 설치했다.

글꼴은 은진글꼴을 설치하였다.

바탕화면은 원더걸즈로...ㅋㅋㅋ

그냥 보면 윈도우 비스타(?) 같아 보이나???

여하튼 이건 페도라7 이다.

사람들이 우분투 많이 쓰던데.... 난 페도라만 쓴다.

사용자 삽입 이미지

베릴이 좋긴 좋다.
C/C++ 에서 변수를 선언하고 값을 넣으면, 메모리에 그 값이 저장된다.

C/C++ 에서는 typecast 를 허용한다.

int a = '\x78\x56\x34\x12';

라고 하면 메모리에 78 56 34 12 라고 들어가고 값을 읽어들일때는
12 34 56 78 로 읽어들일 것이다.

위 방식말고 16진수 12345678 의 10진수값을 바로 a 에 넣어도 메모리에는 같은 값이 들어간다.

이렇게 int 로 선언한후 char 포인터를 이용해 a 의 주소를 가리킨 다음 그 값을 읽으면
78 을 읽어 들인다.

만약 char a[4] = {'\x78','\x56',\x34',\x12'};
로 선언한후 int *p = (int *)a;
로 한후 *p 를 출력하게 되면 16진수 12345678 의 10진수 값이 나올것이다.

C/C++ 에서는 메모리에 저장되는 값은 16진수 형태로 같고 그걸 읽어들이는 자료형에 의해서 값을 읽는 방식이 정해진다.

float *p = (float *)a; 하게 되면, a 에 저장되어 있는값의 float 표현으로 출력될 것이다.

만약 **p 이면 a 에 저장되어 있는 4바이트내용의 주소에 있는 값을 읽어올것이다.
0x12345678 에 있는 값을 참조할 것이다.

이해가 되면, 자료형에 크게 상관없이 프로그램을 원하는데로 만들수 있을 것이다.

오로지 char 배열만 가지고 얼마든지 int , float, 포인터를 흉내낼수 있을것이다.

typecast 를 이용해서.
앞에서 int 형의 저장에 대해서 살펴보았다.

이제 부동소수 표현방식에 대해서 살펴보겠다.

부동소수 표현 방식은 4바이트의 경우

1 bit 부호 |  8bit 지수부 | 23 bit 가수부

로 나누어져 있다.

0|000 0000 0|000 0000 0000 0000 0000

로 표현되어 지는데.

지수부 표현방식은 2의 지수승으로 표현된다. 지수승 표현은 8bit 계산값 n 에서 127을 뺀값을 지수승 하는 방식이다.

예를 들어, 011 1111 1  일 경우 127이므로 127 - 127 =0 이 되므로 지수표현은 2의 0승 즉 1이 된다.

그다음 가수부 표현은 첫번째 bit 1/2
두번째 bit 1/4
이런식으로 계산하게 된다.

이 방식으로 1.0을 표현하면,

0|011 1111 1|000 0000 0000 0000 0000 0000 이 되고 이걸 16진수로 표현하면

3        f        8       0     0      0     0       0즉,
3f800000 가 된다.

실제 프로그램에서 메모리에는 위치가 반대로 되므로

00 00 80 3f  이런식으로 잡힐것이다.

같은 방식으로 1.5 는

3f c0 00 00 가 될 것이다.

사용자 삽입 이미지

C/C++ 에서 메모리가 어떻게 되고 변수가 메모리에 어떻게 자리잡는지 알아보도록 하자.

int main()
{
     int c = '\xde\xad\xbe\xef';
     int a = '\x78\x56\x34\x12';
     static int b;
     return 0;
}

다음과 같은 소스코드가 있을때, 변수  a 는 stack 에 자리잡게 된다. 4바이트 만큼.

a = '\x78\x56\x34\x12';

을 하게 되면, a 의 메모리는 78 56 34 12 순으로 저장되며 값을 읽어 올때는
12345678 로 읽어진다.

그리고 int a; int b; 로 하게 되면, b 다음에 a 가 바로 오는것이 아니라 dummy 중간에 dummy 값을 가진다.

사용자 삽입 이미지

78 56 34 12 다음에 dummy 값인 cc cc cc 가 들어있고 다음에 de ad be af 값이 들어있는것을 알 수 있다.

만약에 static int a; 하게 되면 a 값은 스택에 잡히지 않게 되고 data 영역에 잡힌다.

지역변수 a 는 0x0012FFxx 영역에 잡히지만,
static a 는 0x004171xx 영역에 잡힌다.

int 4 byte
char 1 byte
short 2 byte
double 8 byte
이다.

+ Recent posts