아-.
길게 쓰다가 그냥 다시 씁니다.
1. 실수
창조에서 실수는 IEEE 754 double-precision으로 보입니다.
이 표현 방법의 스펙은,
- 메모리를 64비트 (8바이트) 사용합니다.
- 표현 범위: 십진수로 약 15자리
- 가장 작은 값: 2.23 x 10^308
- 가장 큰 값: 1.80 x 10^308
십진수로, 숫자 15개 정도만 기억할 수 있습니다.
참고로 부동소수점 방식(IEEE 754)은 큰 수를 표현할수록 정밀도가 떨어집니다.
(예: 0.000000001 + 100000000 = 100000000.000000001 이 되지 않고 100000000 으로 잘린다든지)
단, 정수가 필요한 곳에는 자동으로 반올림됩니다.
예를 들어 픽셀 좌표는 정수 그리드인데, 10.5를 주면 11로 반올림되어 처리됩니다.
DLL 함수를 호출할 때도 반올림되어 처리됩니다.
즉 Api 함수 등에는 3.14 같은 소숫점을 넘길 수 없고, 넘기면 3 이란 정수값으로 반올림되어 넘겨집니다.
2. 문자
델파이에 있는 string 타입과 호환되는 파스칼 문자열입니다.
문자열의 길이 (32비트)와 실제 문자열 데이터를 가지고 있습니다.
따라서 C 문자열과 다르게, 문자열 안에 0 값 (Null-value)를 포함한 바이너리 데이터도 저장할 수 있으며, 문자열이 얼마나 길든 상관 없이 길이 구하는 시간이 일정합니다.
창조 기본 함수만 가지고 쓰면 문자열은 변경 불가(immutable)입니다.
문자열의 내용을 바꿀 수 없고, 바꾸려 시도하면 바뀐 내용을 가진 새 문자열이 만들어집니다.
예를 들면,
다 := 가 + 나;
에서 '가'와 '나' 내용을 합친 '다'라는 문자열이 새로 생기지만, '가'와 '나' 내용이 바뀌는 것은 아닙니다.
문자복사, 문자삭제 같은 함수를 쓸 때도 마찬가지이며, 문자열 다루면서 속도가 느려지는 주 원인이 되므로 주의해야 합니다.
3. 객체형
다른 언어에서는 참조형이라고도 하는 것입니다.
ㅎ창, ㅎ버튼 같은 변수인데, 창조에서는 제한적이지만 호환 가능한 객체형끼리 대입할 수 있습니다.
창조에서는 '생성해' 말고 새 객체가 만들어지지 않기 때문에 이런 경우를 제외하곤 객체에 직접 대입해선 안 됩니다.
잘못된 사용 예:
('버튼0' 있다고 했을 때)
버튼0 := "제목";
DLL 함수로 넘기면 32비트 포인터 값으로 넘어옵니다. |
|