C#에서 정수 및 부동 소수점 수 조작Manipulate integral and floating point numbers in C#

이 자습서에서는 C#의 숫자 형식을 대화형으로 설명합니다.This tutorial teaches you about the numeric types in C# interactively. 작은 양의 코드를 작성한 다음 해당 코드를 컴파일하고 실행합니다.You'll write small amounts of code, then you'll compile and run that code. 이 자습서에는 C#의 숫자 및 수학 연산을 살펴보는 일련의 단원이 포함되어 있습니다.The tutorial contains a series of lessons that explore numbers and math operations in C#. 이러한 단원에서는 C# 언어의 기본 사항을 설명합니다.These lessons teach you the fundamentals of the C# language.

이 자습서에서는 개발에 사용할 수 있는 머신이 있다고 예상합니다.This tutorial expects you to have a machine you can use for development. .NET 자습서 Hello World 10분 완성에는 Windows, Linux 또는 macOS의 로컬 개발 환경 설정에 대한 지침이 포함되어 있습니다.The .NET tutorial Hello World in 10 minutes has instructions for setting up your local development environment on Windows, Linux, or macOS. 사용할 명령에 대한 간단한 개요는 개발 도구 익히기에 자세한 정보의 링크와 함께 나와 있습니다.A quick overview of the commands you'll use is in the Become familiar with the development tools with links to more details.

정수 계산 살펴보기Explore integer math

numbers-quickstart라는 디렉터리를 만듭니다.Create a directory named numbers-quickstart. 현재 디렉터리로 만들고 다음 명령을 실행합니다.Make that the current directory and run the following command:

dotnet new console -n NumbersInCSharp -o .

원하는 편집기에서 Program.cs를 열고 Console.WriteLine("Hello World!"); 줄을 다음으로 바꿉니다.Open Program.cs in your favorite editor, and replace the line Console.WriteLine("Hello World!"); with the following:

int a = 18;
int b = 6;
int c = a + b;
Console.WriteLine(c);

명령 창에 dotnet run을 입력하여 이 코드를 실행합니다.Run this code by typing dotnet run in your command window.

정수를 사용하는 기본 수학 연산 중 하나를 방금 살펴봤습니다.You've just seen one of the fundamental math operations with integers. int 형식은 정수(0, 양의 정수 또는 음의 정수)를 나타냅니다.The int type represents an integer, a zero, positive, or negative whole number. 더하기의 경우 + 기호를 사용합니다.You use the + symbol for addition. 정수에 대해 다른 일반적인 수학 연산은 다음과 같습니다.Other common mathematical operations for integers include:

  • 빼기의 경우 -- for subtraction
  • 곱하기의 경우 ** for multiplication
  • 나누기의 경우 // for division

다른 연산을 살펴보세요.Start by exploring those different operations. c의 값을 쓰는 줄 뒤에 다음 줄을 추가합니다.Add these lines after the line that writes the value of c:


// subtraction
c = a - b;
Console.WriteLine(c);

// multiplication
c = a * b;
Console.WriteLine(c);

// division
c = a / b;
Console.WriteLine(c);

명령 창에 dotnet run을 입력하여 이 코드를 실행합니다.Run this code by typing dotnet run in your command window.

원하는 경우 동일한 줄에서 여러 수학 연산을 수행하여 실험할 수도 있습니다.You can also experiment by performing multiple mathematics operations in the same line, if you'd like. 예를 들어 c = a + b - 12 * 17;을 사용해 보세요.Try c = a + b - 12 * 17; for example. 변수와 상수를 혼합해서 사용할 수 있습니다.Mixing variables and constant numbers is allowed.

C# (또는 다른 프로그래밍 언어)를 살펴보면서 코드를 작성할 때 실수를 하게 될 것입니다.As you explore C# (or any programming language), you'll make mistakes when you write code. 컴파일러는 그러한 오류를 찾아 사용자에게 보고합니다.The compiler will find those errors and report them to you. 출력에 오류 메시지가 포함되어 있으면 예제 코드와 창의 코드를 자세히 살펴보고 수정 사항을 확인하세요.When the output contains error messages, look closely at the example code and the code in your window to see what to fix. 이 연습은 C# 코드의 구조를 학습하는 데 도움이 됩니다.That exercise will help you learn the structure of C# code.

첫 번째 단계를 완료했습니다.You've finished the first step. 다음 섹션을 시작하기 전에 현재 코드를 별도의 메서드로 이동합니다.Before you start the next section, let's move the current code into a separate method. 이렇게 하면 새 예제 작업을 쉽게 시작할 수 있습니다.That makes it easier to start working with a new example. Main 메서드의 이름을 WorkingWithIntegers로 바꾸고 WorkingWithIntegers를 호출하는 새 Main 메서드를 작성합니다.Rename your Main method to WorkingWithIntegers and write a new Main method that calls WorkingWithIntegers. 작업을 마치면 코드가 다음과 같이 됩니다.When you finish, your code should look like this:

using System;

namespace NumbersInCSharp
{
    class Program
    {
        static void WorkingWithIntegers()
        {
            int a = 18;
            int b = 6;
            
            // addition
            int c = a + b;
            Console.WriteLine(c);
            
            // subtraction
            c = a - b;
            Console.WriteLine(c);
            
            // multiplication
            c = a * b;
            Console.WriteLine(c);
            
            // division
            c = a / b;
            Console.WriteLine(c);
        }

        static void Main(string[] args)
        {
            WorkingWithIntegers();
        }
    }
}

연산 순서 알아보기Explore order of operations

WorkingWithIntegers()에 대한 호출을 주석으로 처리합니다.Comment out the call to WorkingWithIntegers(). 그러면 이 섹션에서 작업할 때 출력이 덜 복잡해집니다.It will make the output less cluttered as you work in this section:

//WorkingWithIntegers();

//는 C#에서 주석을 시작합니다.The // starts a comment in C#. 주석은 소스 코드에 유지하되 코드로 실행하지는 않으려는 모든 텍스트입니다.Comments are any text you want to keep in your source code but not execute as code. 컴파일러는 주석에서 실행 코드를 생성하지 않습니다.The compiler does not generate any executable code from comments.

C# 언어는 수학에서 배운 규칙과 일치하는 규칙으로 여러 가지 수학 연산의 우선 순위를 정의합니다.The C# language defines the precedence of different mathematics operations with rules consistent with the rules you learned in mathematics. 곱하기와 나누기는 더하기와 빼기보다 우선 순위가 높습니다.Multiplication and division take precedence over addition and subtraction. 다음 코드를 Main 메서드에 추가하고 dotnet run을 실행하여 살펴봅니다.Explore that by adding the following code to your Main method, and executing dotnet run:

int a = 5;
int b = 4;
int c = 2;
int d = a + b * c;
Console.WriteLine(d);

출력에서는 곱하기가 수행된 후 더하기가 수행되었음을 보여 줍니다.The output demonstrates that the multiplication is performed before the addition.

먼저 수행하려는 연산 주위에 괄호를 추가하여 다른 연산 순서를 적용할 수 있습니다.You can force a different order of operation by adding parentheses around the operation or operations you want performed first. 다음 줄을 추가하고 다시 실행합니다.Add the following lines and run again:

d = (a + b) * c;
Console.WriteLine(d);

여러 다른 연산을 결합하여 자세히 살펴보세요.Explore more by combining many different operations. Main 메서드의 아래쪽에 다음과 같은 줄을 추가합니다.Add something like the following lines at the bottom of your Main method. dotnet run을 다시 시도해 봅니다.Try dotnet run again.

d = (a + b) - 6 * c + (12 * 4) / 3 + 12;
Console.WriteLine(d);

정수에 대해 흥미로운 동작을 이미 알고 있을 수 있습니다.You may have noticed an interesting behavior for integers. 정수 나누기는 결과에 소수 또는 소수 부분이 포함될 것으로 예상되는 경우에도 항상 정수 결과를 생성합니다.Integer division always produces an integer result, even when you'd expect the result to include a decimal or fractional portion.

이 동작을 못 봤다면 Main 메서드의 끝에 다음 코드를 사용해 봅니다.If you haven't seen this behavior, try the following code at the end of your Main method:

int e = 7;
int f = 4;
int g = 3;
int h = (e + f) / g;
Console.WriteLine(h);

dotnet run을 다시 입력하여 결과를 확인합니다.Type dotnet run again to see the results.

넘어가기 전에 이 섹션에서 작성한 모든 코드를 새 메서드에 배치해 보겠습니다.Before moving on, let's take all the code you've written in this section and put it in a new method. 이러한 새 메서드의 이름을 OrderPrecedence라고 하겠습니다.Call that new method OrderPrecedence. 다음과 같은 코드가 만들어질 것입니다.You should end up with something like this:

using System;

namespace NumbersInCSharp
{
    class Program
    {
        static void WorkingWithIntegers()
        {
            int a = 18;
            int b = 6;
            
            // addition
            int c = a + b;
            Console.WriteLine(c);
            
            // subtraction
            c = a - b;
            Console.WriteLine(c);
            
            // multiplication
            c = a * b;
            Console.WriteLine(c);
            
            // division
            c = a / b;
            Console.WriteLine(c);
        }

        static void OrderPrecedence()
        {
            int a = 5;
            int b = 4;
            int c = 2;
            int d = a + b * c;
            Console.WriteLine(d);

            d = (a + b) * c;
            Console.WriteLine(d);

            d = (a + b) - 6 * c + (12 * 4) / 3 + 12;
            Console.WriteLine(d);

            int e = 7;
            int f = 4;
            int g = 3;
            int h = (e  + f) / g;
            Console.WriteLine(h);
        }

        static void Main(string[] args)
        {
            WorkingWithIntegers();

            OrderPrecedence();

        }
    }
}

정수 전체 자릿수 및 한도 살펴보기Explore integer precision and limits

마지막 샘플에서는 정수 나누기가 결과를 자르는 것을 보여 줍니다.That last sample showed you that integer division truncates the result. modulo 연산자(% 문자)를 사용하여 나머지를 얻을 수 있습니다.You can get the remainder by using the modulo operator, the % character. Main 메서드에 다음 코드를 사용해 봅니다.Try the following code in your Main method:

int a = 7;
int b = 4;
int c = 3;
int d = (a + b) / c;
int e = (a + b) % c;
Console.WriteLine($"quotient: {d}");
Console.WriteLine($"remainder: {e}");

C# 정수 형식은 한 가지 다른 면에서 수학의 정수와 다릅니다. 즉 int 형식에는 최소 한도와 최대 한도가 있습니다.The C# integer type differs from mathematical integers in one other way: the int type has minimum and maximum limits. 이 코드를 Main 메서드에 추가하여 해당 한도를 확인합니다.Add this code to your Main method to see those limits:

int max = int.MaxValue;
int min = int.MinValue;
Console.WriteLine($"The range of integers is {min} to {max}");

계산이 해당 한도를 초과하는 값을 생성하는 경우 언더플로 또는 오버플로 조건이 발생합니다.If a calculation produces a value that exceeds those limits, you have an underflow or overflow condition. 답은 한 한도에서 다른 한도로 래핑하는 것으로 나타납니다.The answer appears to wrap from one limit to the other. 다음 두 줄을 Main 메서드에 추가하여 예제를 확인합니다.Add these two lines to your Main method to see an example:

int what = max + 3;
Console.WriteLine($"An example of overflow: {what}");

답은 최소 (음의) 정수와 아주 가깝습니다.Notice that the answer is very close to the minimum (negative) integer. min + 2와 같습니다.It's the same as min + 2. 더하기 연산은 정수에 대해 허용된 값을 오버플로했습니다.The addition operation overflowed the allowed values for integers. 오버플로가 가능한 가장 큰 정수에서 가장 작은 정수로 “래핑”하기 때문에 답은 아주 큰 음수입니다.The answer is a very large negative number because an overflow "wraps around" from the largest possible integer value to the smallest.

int 형식이 요구 사항을 충족하지 않을 때 사용하는 여러 한도와 전체 자릿수가 있는 다른 숫자 형식이 있습니다.There are other numeric types with different limits and precision that you would use when the int type doesn't meet your needs. 이에 대해 다음에 살펴보겠습니다.Let's explore those next.

다시 한번, 이 섹션에서 작성한 코드를 별도의 메서드로 이동해 보겠습니다.Once again, let's move the code you wrote in this section into a separate method. 이 EventHandler의 이름을 TestLimits로 지정합니다.Name it TestLimits.

double 형식 작업Work with the double type

double 숫자 형식은 배정밀도 부동 소수점 수를 나타냅니다.The double numeric type represents a double-precision floating point number. 이러한 용어는 생소할 수 있습니다.Those terms may be new to you. 부동 소수점 수는 아주 크거나 작은 정수가 아닌 수를 나타낼 때 유용합니다.A floating point number is useful to represent non-integral numbers that may be very large or small in magnitude. 배정밀도란 이러한 숫자가 단정밀도보다 큰 전체 자릿수를 사용하여 저장됨을 의미합니다.Double-precision means that these numbers are stored using greater precision than single-precision. 최신 컴퓨터에서는 단정밀도 숫자보다 배정밀도를 더 많이 사용합니다.On modern computers, it is more common to use double precision than single precision numbers. 지금 살펴보세요.Let's explore. 다음 코드를 추가하고 결과를 확인합니다.Add the following code and see the result:

double a = 5;
double b = 4;
double c = 2;
double d = (a + b) / c;
Console.WriteLine(d);

답에 몫의 소수 부분이 포함되어 있습니다.Notice that the answer includes the decimal portion of the quotient. double을 사용하여 약간 더 복잡한 식을 사용해 보세요.Try a slightly more complicated expression with doubles:

double e = 19;
double f = 23;
double g = 8;
double h = (e + f) / g;
Console.WriteLine(h);

double 값의 범위는 정수 값보다 훨씬 큽니다.The range of a double value is much greater than integer values. 지금까지 작성한 코드 아래에 다음 코드를 사용해 봅니다.Try the following code below what you've written so far:

double max = double.MaxValue;
double min = double.MinValue;
Console.WriteLine($"The range of double is {min} to {max}");

이러한 값은 과학적 표기법으로 인쇄됩니다.These values are printed out in scientific notation. E의 왼쪽에 있는 숫자는 유효 숫자입니다.The number to the left of the E is the significand. 오른쪽의 숫자는 지수이며 10의 배수입니다.The number to the right is the exponent, as a power of 10.

수학의 10진수 숫자와 마찬가지로, C#에서 double에는 반올림 오류가 발생할 수 있습니다.Just like decimal numbers in math, doubles in C# can have rounding errors. 다음 코드를 사용해 보세요.Try this code:

double third = 1.0 / 3.0;
Console.WriteLine(third);

0.3 반복은 1/3과 정확하게 동일하지는 않습니다.You know that 0.3 repeating is not exactly the same as 1/3.

과제Challenge

double 형식을 사용하여 큰 숫자, 작은 숫자, 곱하기 및 나누기로 다른 계산을 수행해 보세요.Try other calculations with large numbers, small numbers, multiplication and division using the double type. 더 복잡한 계산을 수행해 보세요.Try more complicated calculations.

과제를 하느라 약간의 시간을 보낸 후 작성한 코드를 새 메서드에 배치합니다.After you've spent some time with the challenge, take the code you've written and place it in a new method. 이러한 새 메서드의 이름을 WorkWithDoubles로 지정합니다.Name that new method WorkWithDoubles.

고정 소수점 형식 작업Work with fixed point types

C#의 기본적인 숫자 형식인 정수 형식과 double 형식을 살펴봤습니다.You've seen the basic numeric types in C#: integers and doubles. 학습할 또 다른 형식이 있습니다. 바로 decimal 형식입니다.There is one other type to learn: the decimal type. decimal 형식은 범위가 작지만 double보다 전체 자릿수가 큽니다.The decimal type has a smaller range but greater precision than double. 고정 소수점이라는 용어는 소수점(또는 이진 소수점)이 이동하지 않음을 의미합니다.The term fixed point means that the decimal point (or binary point) doesn't move. 이 형식에 대해 살펴보겠습니다.Let's take a look:

decimal min = decimal.MinValue;
decimal max = decimal.MaxValue;
Console.WriteLine($"The range of the decimal type is {min} to {max}");

범위가 double 형식보다 작습니다.Notice that the range is smaller than the double type. 다음 코드를 사용하여 소수점이 있는 더 큰 전체 자릿수를 확인할 수 있습니다.You can see the greater precision with the decimal type by trying the following code:

double a = 1.0;
double b = 3.0;
Console.WriteLine(a / b);

decimal c = 1.0M;
decimal d = 3.0M;
Console.WriteLine(c / d);

숫자의 M 접미사는 상수가 decimal 형식을 사용해야 함을 나타내는 방법입니다.The M suffix on the numbers is how you indicate that a constant should use the decimal type.

소수점 형식을 사용하는 수학에는 소수점 오른쪽에 더 많은 숫자가 있습니다.Notice that the math using the decimal type has more digits to the right of the decimal point.

과제Challenge

이제 여러 가지 숫자 형식을 살펴봤으므로 반지름이 2.50센티미터인 원의 면적을 계산하는 코드를 작성하세요.Now that you've seen the different numeric types, write code that calculates the area of a circle whose radius is 2.50 centimeters. 원의 면적은 반지름 제곱 곱하기 PI입니다.Remember that the area of a circle is the radius squared multiplied by PI. 힌트: .NET에는 PI의 상수가 포함되어 있습니다. 즉 해당 값에 사용할 수 있는 Math.PI입니다.One hint: .NET contains a constant for PI, Math.PI that you can use for that value.

19에서 20 사이의 답을 받아야 합니다.You should get an answer between 19 and 20. GitHub에서 완성된 샘플 코드를 보고 답을 확인할 수 있습니다.You can check your answer by looking at the finished sample code on GitHub.

원하는 경우 다른 수식을 사용해 보세요.Try some other formulas if you'd like.

“C#의 숫자” 빠른 시작을 완료했습니다.You've completed the "Numbers in C#" quickstart. 자체 개발 환경에서 분기 및 루프 빠른 시작을 계속할 수 있습니다.You can continue with the Branches and loops quickstart in your own development environment.

다음 항목에서는 C#의 숫자에 대해 더 자세히 알아볼 수 있습니다.You can learn more about numbers in C# in the following topics: