전체 글79 크기가 서로 다른 부동 소수점 형식 사이의 변환 float와 double 사이의 형식 변환에서도 정수 형식끼리의 변환에서 일어났던 일(오버플로우)이 그대로 일어나지 않습니다. float, double은 소수를 이진수로 메모리에 보관합니다. 이것을 다른 형식으로(float에서 double로, 또는 double에서 float으로) 변환하려면 10진수로 복원한 후, 다시 이진수로 변환해서 기록하게 됩니다. 문제는 이진수를 표현하는 소수가 완전하지 않다는 데 있습니다. 1/3 같은 수는 0.333 ... 같은 무한 소수가 되지요. 즉 정밀한 수를 다뤄야하는 프로그램에서 float, double 사이의 형식 변환을 시도할 때는 주의를 기울여야 합니다. 다음 예제는 float, double 간 형식 변환에서 일어날 수 있는 문제를 보여줍니다. 1 2 3 4 5 .. 2022. 7. 18. 크기가 서로 다른 정수 형식 사이의 변환 IntegralConversion 88p 크기가 서로 다른 정수 형식 사이의 변환에서는 작은 정수 형식의 변수에 있는 데이터를 큰 정수 형식의 변수로 옮길 때는 문제가 없지만, 그 반대의 경우, 원본 변수의 데이터가 형식 변환하려는 대상 변수의 용량보다 큰 경우에는 오버플로우가 발생합니다. 다음 예제 프로그램은 1바이트 크기의 sbyte 형식과 4바이트 크기의 int 형식 사이의 형식 변환 예제입니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 using System; namespace IntegralConversion { class MainApp { static void Main(string[] args) { sbyte a = 127; C.. 2022. 7. 15. 박싱과 언박싱에 대한 이해 object 형식은 참조 형식이기 때문에 힙에 데이터를 할당합니다. int 형식이나 double 형식은 값 형식이기 때문에 스택에 데이터를 할당합니다. object 형식은 값 형식의 데이터를 힙에 할당하기 위한 "박싱(Boxing)" 기능을 제공합니다. object 형식에 값 형식의 데이터를 할당하려는 시도가 이루어지면 object 형식은 박싱을 수행해서 해당 데이터를 힙에 할당합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 using System; namespace BoxingUnboxing { class MainApp { static void Main(string[] args) { int a = 123; object .. 2022. 7. 15. object 형식의 이해 object는 물건, 객체라는 뜻의 영어 단어 입니다. 그러니 object 형식은 어떤 데이터든지 다룰 수 있는 데이터 형식이라고 말할 수 있습니다. 상속의 효과 덕분입니다. C#은 object가 모든 데이터를 다룰 수 있도록 모든 데이터 형식(기본 데이터 형식뿐 아니라 모든 복합 데이터 형식, 심지어 프로그래머들이 만드는 데이터 형식마저도) 이 자동으로 object 형식으로부터 상속받게 한 것 입니다. 즉 object 형식은 모든 데이터 형식의 조상입니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 using System; namespace Object { class Program { static void Main(string[] args) { objec.. 2022. 7. 15. 이전 1 ··· 13 14 15 16 17 18 19 20 다음