float floatValue = 3;
float floatValue2 = 3.5f;
float 타입 변수에 정수 값을 넣을 때는 f를 생략해도 된다.
하지만 소수점이 있는 실수는 반드시 f를 붙여야 한다.
byte byteValue = 255;
byteValue++; // 0
byteValue++; // 1
byte의 값의 범위는 0~255이므로,
255에서 값을 더하면 256이 아니라 0이 된다.
이처럼 최대값의 범위를 초과하는걸 오버플로우라고 한다.
byte byteValue1 = 0;
byteValue1--; // 255
최소값보다 더 작은 수가 될때는 언더플로우라고 한다.
Console.WriteLine(true && true); // true
Console.WriteLine(true && false); // false
Console.WriteLine(false && true); // false
Console.WriteLine(false && false); // false
&&을 사용할 때는 양쪽 조건이 전부 true 일 때만 true를 반환한다.
bool boolValue = false && (true || false) && true;
Console.WriteLine(boolValue); // false
즉 && false나 false &&같이 하나라도 false와 비교하면 무조건 false를 반환한다.
int intValue1 = 1;
for (int i = 0; i < 5; i++)
{
intValue1++;
}
Console.WriteLine(intValue1); // 5-0 = 5번 반복 = 6
int intValue3 = 0;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
intValue3++;
}
}
Console.WriteLine(intValue3); // 4-0 = 4번 반복을 3번 반복한다 = 4 * 3 = 12번 반복 = 12
for문 안에 조건문이 <일 때는 비교값 - 시작값 = 반복횟수 라고 생각해야겠다.
<=일 때는 (비교값 + 1 ) - 시작값 = 반복횟수
물론 연산문에서 i++같이 1씩 증가할때만이고 연산문이 다르면 다르게 생각해야한다.
static void Main(string[] args)
{
Func1(5);
}
static void Func1(int value)
{
Console.WriteLine(value++); // 1. 5 출력후 6
Func2(value); // 3. 갔다 오면 그대로 6
Console.WriteLine(value++); // 4. 6 출력후 7
}
static void Func2(int value)
{
Console.WriteLine(value++); // 2. 6 출력후 7
}
ref를 붙여서 쓰지 않는 이상 값이 변하지 않는건데,
값타입과 참조타입을 좀 더 신경써야겠다.
struct MyStruct
{
public int value1;
public int value2;
}
/////////////////////////
MyStruct s = new MyStruct() { value1 = 1, value2 = 2 };
MyStruct t = s;
// s = 1, 2
// t = 1, 2
s.value1 = 3;
// s = 3, 2
// t = 1, 2 // 값타입이라 공유 X
t.value2 = 4;
// s = 3, 2
// t = 1, 4
Console.WriteLine(s.value1 + s.value2 + t.value1 + t.value2); // 10
MSW에서는 값 타입, 참조 타입을 구분하지않고 모른채로 막 사용하다보니,
struct도 당연하게 참조 타입이라 생각하고 있었다.
값 타입과 참조 타입에 대해 다시 한번 인지하게 됐다.
struct = 값 타입
class = 참조 타입
enum Season
{
Spring,
Summmer,
Autumn = 20,
Winter
}
Console.WriteLine((Season)21); // Winter
Console.WriteLine((Season)50); // 50
enum을 string과 int가 1:1로 대응하는 key-value형태라는건 알고 있었는데,
Console.WriteLine((Season)50);같이 enum에 대응하는 값이 없을 때는
안나오거나 null로 출력될거라 생각했었다.
하지만 예상을 벗어난 50이 출력됐다.
알고보니 enum에 해당 int값에 대응하는 멤버명이 없으면,
그대로 int값이 출력된다고 한다.
Console.WriteLine(Enum.IsDefined(typeof(Season), 50));
그리고 int값이 enum에 있는지 알 수 있는 IsDefined 함수도 있다.
다시 보면 다 알 수 있는건데 아쉽다는 생각이 든다.
현재 배우는게 얇은 지식으로 점점 늘어가는 느낌이다.
하다보면 늘기야 하겠지만 능숙해질 수 있을까?