OS차이에 따른 응용프로그램 실행환경의 문제를 해결하는 소프트웨어
중간 언어로 변환되는 언어
e.g.
CTS의 System.Int32는 C#에서 int로 구현되었다. 따라서 아래 두 문장은 동일하다.
System.Int32 a = 123;
int b = 123;
IOC : 응용프로그램의 초기화부터 종료까지의 흐름이 사용자코드가 아닌 프레임워크에 의해 관리되는 것
int a = 5;
Console.Write(a);
위와 같이 선언, 할당하고 출력한다. a는 변수, 5는 리터럴이다.
음수 표현 시 2의 보수 방식 이용
(이유 : 단순히 최상위비트의 0,1로 부호를 판별하면, 0이 두 개 존재하는 낭비 발생)
-1을 나타내고자 하는 경우,
1 = 0000_0001(2)
비트 반전 : 1111_1110(2)
1 더하기 : 1111_1111(2)
여기서, 1111_1111(2) = -1
float, double, decimal
float의 경우 부호/지수/가수부분으로 나뉨
지수부는 (지수+127)의 값이 입력됨
char (16bit)
bool (8bit, true/false)
object i = 123;
Console.WriteLine(a); // 123 출력
e.g. int는 object - System.ValueType - int 순서로 상속받음
암시적변환 : 작은 범위의 자료형에서 큰 범위의 자료형으로 변환
부동소수점 형식간 변환 : float를 double로 바꾸는 과정에서 정밀도가 손상될 수 있음. 즉, (double)0.1f가 0.1임을 보장할 수 없음.
명시적변환 : 범위 관계없이 개발자가 의도한 대로 변환
부동소수점을 정수로 변환 : 소수점 버리는 형태로 변환됨
문자열-숫자간 변환
자료형.Parse(문자열)
string str = "123";
int num = int.Parse(str);
Console.WriteLine(num); // 123
숫자.ToString()
float num = 5.3f;
string str = num.ToString(num);
Console.WriteLine(str); // "5.3"
데이터 변경 불가
const 자료형 상수명 = 값;
enum 이름 : 기반자료형 {상수1=값1, 상수2=값2, ... }
e.g.
class Program {
enum Subject { ML, DS = 53, CSHARP }
static void Main(string[] args){
Console.WriteLine(Subject.ML); // "ML"
Console.WriteLine(Subject.DS); // "DS"
Console.WriteLine(Subject.CSHARP); // "CSHARP"
Console.WriteLine((int)Subject.ML); // 0
Console.WriteLine((int)Subject.DS); // 53
Console.WriteLine((int)Subject.CSHARP); // 54
Subject this_is_variable = Subject.DS;
Console.WriteLine(this_is_variable); // "DS"
Console.WriteLine((int)this_is_variable); // 53
}
}
null값을 가질 수 있는 자료형
int? a = null;
Console.WriteLine(a.HasValue) // false
Console.WriteLine(a == null) // true
Console.WriteLine(a.Value) // Runtime error
var키워드로 변수를 선언과동시에 할당하면, 해당 변수의 자료형이 자동지정됨.
var integer = 53; // 정수 리터럴이 입력되었으므로, int interger = 53; 과 같은 동작
값형식 변수 선언시 object와 var의 차이 : object는 박싱/언박싱이 일어나지만, var는 아니다.