12. 실수를 표현하는 float, double, decimal
using System;
namespace A012
{
class Program
{
static void Main(string[] args)
{
float flt = 1F / 3;
double dbl = 1D / 3;
decimal dcm = 1M / 3;
Console.WriteLine("float : {0}\ndouble : {1}\ndecimal : {2}", flt, dbl, dcm);
Console.WriteLine($"float : {sizeof(float)}\ndouble : {sizeof(double)}\ndecimal : {sizeof(decimal)}");
Console.WriteLine($"float : {float.MinValue} ~ {float.MaxValue}\ndouble : {double.MinValue} ~ {double.MaxValue}\ndecimal : {decimal.MinValue} ~ {decimal.MaxValue}");
}
}
}
결과
float : 0.33333334
double : 0.3333333333333333
decimal : 0.3333333333333333333333333333
float : 4
double : 8
decimal : 16
float : -3.4028235E+38 ~ 3.4028235E+38
double : -1.7976931348623157E+308 ~ 1.7976931348623157E+308
decimal : -79228162514264337593543950335 ~ 79228162514264337593543950335
코드 공부를 하면 항상 나오는 자료형의 크기 표시이다
처음안 사실인데 C#은 숫자 뒤에 표기를 안해주면 기본적으로 double로 인식하는 것 같다
즉, 1.234도 float가 아니라 double 로 인식하는 것 같다
decimal의 경우 M을 붙여야 한다.
13. 캐스팅과 자료형 변환
using System;
namespace A013
{
class Program
{
static void Main(string[] args)
{
int num = 2134124214;
long bigNum = num;
Console.WriteLine(bigNum);
double x = 1234.5;
int a;
a = (int)x;
Console.WriteLine(a);
}
}
}
결과
2134124214
1234
흔히 보이는 자료형 변경에 대한 이야기이다
암시작 형변환과 명시적 형변환((자료형)변수, 값)에 대한 코드이다
14. 문자열과 숫자의 변환
using System;
namespace A014
{
class Program
{
static void Main(string[] args)
{
string input;
int value;
Console.Write("1. int로 변환할 문자열을 입력하세요: ");
input = Console.ReadLine();
bool result = Int32.TryParse(input, out value);
if (!result)
{
Console.WriteLine($"{input}은 int로 변환될 수 없습니다.\n");
}
else
{
Console.WriteLine($"int {value}로 변환되었습니다.");
}
Console.Write("2. double로 변환할 문자열을 입력하세요: ");
input= Console.ReadLine();
try
{
double m = Double.Parse(input);
Console.WriteLine($"double {m}으로 변환되었습니다.\n");
}
catch(FormatException e)
{
Console.WriteLine(e.Message);
}
}
}
}
1. int로 변환할 문자열을 입력하세요: 123
int 123로 변환되었습니다.
2. double로 변환할 문자열을 입력하세요: 12.3
double 12.3으로 변환되었습니다.
string으로 가져온 값을 int 혹은 double로 바꾸는 방법에 대한 코드이다.
이 코드에서는 parse를 주로 사용했지만, Convert라는 클래스 매소드도 있다고 한다
15. Convert 클래스와 2진수, 8진수, 16진수 출력
using System;
namespace A015
{
class Program
{
static void Main(string[] args)
{
int x, y;
Console.Write("첫 번째 숫자를 입력하세요: ");
x = Convert.ToInt32(Console.ReadLine());
Console.Write("두 번째 숫자를 입력하세요: ");
y = Convert.ToInt32(Console.ReadLine());
Console.WriteLine($"{x} + {y} = {x + y}");
short value = short.MaxValue;
Console.WriteLine("\n2진수, 8진수, 10진수, 16진수로 출력하기");
/*
int baseNum = 2;
string s = Convert.ToString(value, baseNum);
int i = Convert.ToInt32(s, baseNum);
//Console.WriteLine("i = {0}, {1,2}진수 = {2,16}", i, baseNum, s);
Console.WriteLine($"i = {i}, {baseNum,2}진수 = {s,16}");
baseNum = 8;
s = Convert.ToString(value, baseNum);
i = Convert.ToInt32(s, baseNum);
Console.WriteLine($"i = {i}, {baseNum,2}진수 = {s,16}");
baseNum = 10;
s = Convert.ToString(value, baseNum);
i = Convert.ToInt32(s, baseNum);
Console.WriteLine($"i = {i}, {baseNum,2}진수 = {s,16}");
baseNum = 16;
s = Convert.ToString(value, baseNum);
i = Convert.ToInt32(s, baseNum);
Console.WriteLine($"i = {i}, {baseNum,2}진수 = {s,16}");
*/
Calculator(2);
Calculator(8);
Calculator(10);
Calculator(16);
}
static void Calculator(int baseNum)
{
string s = Convert.ToString(short.MaxValue, baseNum);
int i = Convert.ToInt32(s, baseNum);
Console.WriteLine($"i = {i}, {baseNum,2}진수 = {s,16}");
}
}
}
결과
첫 번째 숫자를 입력하세요: 121
두 번째 숫자를 입력하세요: 456
121 + 456 = 577
2진수, 8진수, 10진수, 16진수로 출력하기
i = 32767, 2진수 = 111111111111111
i = 32767, 8진수 = 77777
i = 32767, 10진수 = 32767
i = 32767, 16진수 = 7fff
//Console.WriteLine("i = {0}, {1,2}진수 = {2,16}", i, baseNum, s);
Console.WriteLine($"i = {i}, {baseNum,2}진수 = {s,16}");
코드중 {}의 의미를 잘 이해하지 못했었는데, {A, B}의 A부분은 value가 들어가고 B의 부분에는 최소 자리를 결정한다
14번의 Parse를 Convert로 표현하는 방법에 대한 코드이다.
원래 코드는 주석처리된 코드인데, 함수로 간단히 표현해 보았다.
16. C#의 연산자와 식
using System;
namespace A016
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(3 + 4 * 5);
Console.WriteLine((3 + 4) * 5);
Console.WriteLine(3 * 4 / 5);
Console.WriteLine(4 / 5 * 3);
int a = 10, b = 20, c;
Console.WriteLine(c = a + b);
}
}
}
결과
23
35
2
0
30
기본 연산자에 대해서 알아가는 코드이다. ()의 역할에 대해서, =의 순서에 대해서 알 수 있다.
17. 산술연산
using System;
namespace A017
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("정수의 계산");
Console.WriteLine(123 + 45);
Console.WriteLine(123 - 45);
Console.WriteLine(123 * 45);
Console.WriteLine(123 / 45);
Console.WriteLine(123 % 45);
Console.WriteLine("\n실수의 계산");
Console.WriteLine(123.45 + 67.89);
Console.WriteLine(123.45 - 67.89);
Console.WriteLine(123.45 * 67.89);
Console.WriteLine(123.45 / 67.89);
Console.WriteLine(123.45 % 67.89);
}
}
}
결과
정수의 계산
168
78
5535
2
33
실수의 계산
191.34
55.56
8381.0205
1.8183826778612462
55.56
간단한 사칙연산을 정수 실수값으로 해보는 코드이다.
타 언어와 달리 C#은 실수도 %연산이 된다고 한다. c cpp는 안되는걸 처음 알았다. 쓸일이 없으니...
18. DivideByZeroException과 try ~ catch문
using System;
namespace A018
{
class Program
{
static void Main(string[] args)
{
int x = 10, y = 0;
Console.WriteLine(10.0 / y);
Console.WriteLine(x / y);
}
}
}
결과
∞
Unhandled exception. System.DivideByZeroException: Attempted to divide by zero.
C#에서는 에러를 예외라고 하는 것 같다.
이 코드는 의도적으로 예외를 일으켜보는 코드이다.
이때 try - catch문을 사용하여 예외를 처리할 수 있다
using System;
namespace A018
{
class Program
{
static void Main(string[] args)
{
int x = 10, y = 0;
try
{
Console.WriteLine(x / y);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
결과
Attempted to divide by zero.
19. OverflowException과 checked키워드
using System;
namespace A019
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine($"int.MaxValue = {int.MaxValue}");
int x = int.MaxValue, y = 0;
y = x + 10;
Console.WriteLine($"int.MaxValue + 10 = {y}");
}
}
}
결과
int.MaxValue = 2147483647
int.MaxValue + 10 = -2147483639
int의 최대값에 10을 더한 결과, 오버플로가 일어나 음수로 값이 변경된다.
이때 오류를 출력하기 위해서 checked 키워드를 사용한다고 한다
using System;
namespace A019
{
class Program
{
static void Main(string[] args)
{
int x = int.MaxValue, y = 0;
checked
{
try
{
y = x + 10;
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
Console.WriteLine($"int.MaxValue + 10 = {y}");
}
}
}
결과
Arithmetic operation resulted in an overflow.
int.MaxValue + 10 = 0
이때 checked 키워드는 어떤 역할을 하는가?
try문은 오버플로우를 감지하지 못한다고 한다....
???????
그래서 checked키워드 안에 묻어두면 감지한다고 한다
????????????????
진짜 뭐임?
20. 관계연산자
using System;
namespace A020
{
class Program
{
static void Main(string[] args)
{
bool result;
int first = 10, second = 20;
result = (first == second);
Console.WriteLine($"{first} == {second} : {result}");
result = (first > second);
Console.WriteLine($"{first} > {second} : {result}");
result = (first < second);
Console.WriteLine($"{first} < {second} : {result}");
result = (first >= second);
Console.WriteLine($"{first} >= {second} : {result}");
result = (first <= second);
Console.WriteLine($"{first} <= {second} : {result}");
result = (first != second);
Console.WriteLine($"{first} != {second} : {result}");
}
}
}
결과
10 == 20 : False
10 > 20 : False
10 < 20 : True
10 >= 20 : False
10 <= 20 : True
10 != 20 : True
간단한 관계 연산자의 연산 결과 bool값을 알아보는 코드이다.
'공부 > C#' 카테고리의 다른 글
C# 공부(5) 51~56 (Part 1 End) (0) | 2024.08.24 |
---|---|
C# 공부(4) 41~50 (0) | 2024.08.24 |
C# 공부(3) 31~40 (0) | 2024.08.23 |
C# 공부(2) 21~30 (0) | 2024.08.22 |
C# 공부(1) 1~10 (1) | 2024.08.21 |