C++과 JAVA와의 차이점 중심으로 다룰 예정입니다.
using System;
namespace Study1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
Visual Studio에서 실행하면 다음과 같이 기본적으로 코드가 생성된다.
C#은 Main 함수를 찾아서 실행한다. class는 꼭 Program 클래스가 아니라 다른 클래스이어도 된다. 만약 Main 함수가 2개 이상일 경우 StartupObject(C# 컴파일러 옵션)을 이용해서 특정 클래스의 Main 함수로 지정해줄 수 있다.
프로젝트를 우클릭 후, [속성] -> [시작 개체] 에서 샌택해주면 된다.
자료형 | byte | short | int | long |
---|---|---|---|---|
바이트 수 | 1 | 2 | 4 | 8 |
여기서 주의할 점은 short, int, long은 signed 자료형인 반면에
byte는 unsigned 자료형으로 0~255까지의 값을 갖는다.
일반적으로 숫자를 입력하면 int형으로 설정된다.
자료형 | sbyte | ushort | uint | ulong |
---|---|---|---|---|
바이트 수 | 1 | 2 | 4 | 8 |
비슷하게 sbyte는 signed byte로-128~127까지의 범위를 갖고, ushort, uint, ulong은 unsigned 자료형으로 0과 양수의 값만 갖는다.
자료형 | float | double |
---|---|---|
바이트 수 | 4 | 8 |
소수의 기본 자료형은 double로 계산된다.
따라서 float 변수에 값을 대입할 때 강제 형 변환이 필요로 한다.
ex) float variable = 3.14f;
float variable = (float)3.14
C#의 경우 f나 (float)으로 형 변환을 하지않으면 float 변수에 담을 때 에러가 발생한다. 이는 C#이 버그가 생길 여지가 아예 없애자는 철학을 갖고 있기 때문이다.
자료형 | char |
---|---|
바이트 수 | 2 |
C/C++과 다르게 character는 2byte로 영어뿐만 아니라 한국어까지 변수에 담을 수 있다.
C/C++과 유사하다.
signed 자료형의 경우 최고 바이트 수가 1이면 음수이다. (2의 보수에 의해)
unsigned 자료형의 경우 2의 보수를 사용하지않고 모든 bit를 0과 양수를 표현하기 위해 사용된다.
비트 연산자는 다음과 같다.
비트연산자 | >> | << | & | | | ^ | ~ |
---|---|---|---|---|---|---|
설명 | 우측 시프트연산자 | 좌측 시프트연산자 | and | or | xor | not |
우측 시프트 연산자로 인해 생기는 비트는 해당 변수가 양수면 0으로, 음수면 1으로 채워진다. unsigned 자료형의 경우 항상 0 혹은 양수이므로 0으로 채워진다.
using System;
namespace Study1
{
class Program
{
static void Main(string[] args)
{
byte val = 0xFF; // 0b 1111 1111 , 255
val = (byte)(val >> 1); // 0b 0111 1111 , 127
Console.WriteLine($"{val}"); // 127
sbyte val2 = -128; // 0b 1000 0000 , -128
val2 = (sbyte)(val2 >> 1); // 0b 1100 0000 , -64
Console.WriteLine($"{val2}"); // -64
sbyte val3 = 127; // 0b 0111 1111 , 127
val3 = (sbyte)(val3 >> 1); // 0b 0011 1111 , 63
Console.WriteLine($"{val3}"); // 63
}
}
}
좌측 시프트 연산자의 경우 최상위 비트를 지우고, 최하단의 비트를 0으로 설정한다. 이것만 유의하면 나머지는 쉬울 것 같다.