일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- ue5
- Unreal Engine 5
- 누적 합
- 다이나믹 프로그래밍
- 다익스트라
- DFS
- 구현
- 유니티
- 투 포인터
- 그래프
- 수학
- BFS
- 자료구조
- Team Fortress 2
- 우선순위 큐
- 백준
- XR Interaction Toolkit
- 재귀
- VR
- 브루트포스
- 트리
- 문자열
- 시뮬레이션
- 유니온 파인드
- 알고리즘
- c++
- 그리디 알고리즘
- 스택
- 정렬
- 백트래킹
- Today
- Total
1일1알
1일차 : 데이터 갖고 놀기 본문
출력
Console.WriteLine() : 출력하고 줄 바꿈
Console.Write() : 출력
int num = 0;
Console.WriteLine("Num : {0}", num);
Console.WriteLine($"Num : {num}");
타입
1바이트 : 8비트
u : unsigned ( 음수 미포함)
s : signed (음수 포함)
byte(1바이트 0~255), short(2바이트), int(4바이트), long(8바이트) short, int, long 은 음수 포함
sbyte(-128~127), ushort, uint, ulong
타입의 최댓값에서 1을 증가시키면 최솟값으로 바뀜 ( 오버플로우 )
타입의 최솟값에서 1을 감소시키면 최댓값으로 바뀜 ( 언더플로우 )
ex)
byte num = byte.MaxValue;
num++;
num은 0이 된다.
하지만 출력 부분에서 연산을 해주는 경우에는 신경을 써주어야 한다.
byte num = byte.MaxValue;
Console.WriteLine($"Num : {num+1}"); 이 경우에는 256이 출력되는데, 출력 부분에서 자동으로 int로 형변환이 되는 것 같다.
Console.WriteLine($"Num : {(byte)(num+1)}"); 이렇게 고쳐주면 예상했던 값인 0이 출력된다.
진수
2진수 : 0~1의 숫자를 사용할 수 있다. 앞에 0b를 붙여서 나타낸다.
ex) 0b01, 0b11
16진수 : 0~15의 숫자를 사용할 수 있다. (10~15 : a~f) 앞에 0x를 붙여서 나타낸다.
ex) 0x01, 0xab
16진수 <-> 2진수 변환은 쉽다. 2진수를 4자리씩 끊어서 16진수로 변환, 16진수 한자리를 2진수 4자리로 변환
0b10001111 = 0x8F
정수 범위
1바이트 = 8비트
byte num = 0b11111111 숫자 하나가 각각의 비트를 나타냄
byte는 음수를 포함하지 않기 때문에 num의 값은 255이다.
하지만 sbyte는 음수를 포함한다.
signed 타입에서는 최상위 비트가 부호 비트이기 때문에 최상위 비트가 1이면 2의 보수를 취해서 값을 얻는다.
sbyte 타입은 8비트 크기이고 8번째 비트, 즉 최상위 비트가 1이기 때문에 2의 보수를 취해서 값을 얻는다.
2의 보수 : 모든 비트를 반전시키고 1을 더하면 된다.
11111111 -> -(00000001) = -1
타입 2
bool(1바이트), float(4바이트), double(8바이트), char(2바이트), string
bool : 참 or 거짓 을 나타내는 타입, 참 = true = 1 , 거짓 = false = 0
float : 소수를 나타내는 타입, 정확한 값이 아닌 근삿값을 나타낸다.
float : 소수를 나타내는 타입, 정확한 값이 아닌 근사값을 나타낸다. float보다 정밀한 값을 나타낸다.
char : 문자를 나타내는 타입 (하나의 문자만)
string : 문자열 , 여러 개의 문자를 나타내는 타입 (char의 집합)
그리고 char타입과 정수형 타입을 형변환 할 때 아스키코드표를 이용할 수 있다.
A 라는 문자가 아스키코드표에서 65에 대응되기 때문에 int로 변환하면 65가 나오는 것을 볼 수 있다.
그리고 만약 문자가 0 ~ 9 사이의 숫자라면 ( char ch = '4' 같은 경우)
ch-'0' 을 통해 문자에 저장된 숫자를 추출할 수 있다.
'4' 라는 문자를 '4' - '0' 을 통해서 4를 추출하였다.
var 타입 : 변수의 타입을 추측하여 자동으로 타입이 할당됨 (남용하지 않는 것이 좋음) , 특수한 경우만 사용(타입의 길이가 매우 길 때?)
형식 변환
특정 타입을 다른 타입으로 변환하는 것
작은 범위의 타입을 큰 범위로 변환하는 것은 문제가 없다.
하지만 큰 범위의 타입을 작은 범위로 변환할 때는 문제가 생길 수 있다.
예를 들어 short 타입의 500을 byte 타입으로 변환한다고 하면
500을 2진수로 변환하면
0000 0001 1111 0100 이다. short는 2바이트(16비트) 크기이기 때문에 이 정보를 모두 담을 수 있지만
byte는 1바이트(8비트) 크기이기 때문에 8개의 비트의 정보밖에 담지 못하기 때문에
1111 0100 으로 변환이 된다.
그러므로 작은 타입으로 변환할 때는 조심해야 한다.
타입의 크기가 같을 경우에도 signed와 unsigned일 때 나타낼 수 있는 값의 범위가 다르기 때문에 조심하여야 한다.
소수는 정확한 값이 아닌 최대한 인접한 값을 표시하기 때문에 조심해야 한다.
데이터 연산
사칙연산에서 와 같이 곱하기와 나누기가 더하기와 뺄셈보다 우선순위가 높다.
% : 나머지를 구하는 연산
++ : 1을 더하는 연산
-- : 1을 빼는 연산
전위 연산자 : 연산을 먼저 하고 실행
후위 연산자 : 실행하고 연산을 적용
<, <=, >, >=, ==, !=
왼쪽에 있는 수와 오른쪽에 있는 수를 비교하여 bool타입을 반환
&& : And연산 (전부 참일 때만 true)
|| : Or 연산 (하나만 참이면 true)
! : Not 연산 ( true->false, false->true)
비트 연산
<< : 왼쪽으로 비트 이동
>> : 오른쪽으로 비트 이동
& : 비트가 둘 다 1이면 1, 아니면 0
| : 비트가 둘 중 하나라도 1이면 1, 아니면 0
~ : 비트 반전 ( 1->0 , 0->1)
^ : 같으면 0, 다르면 1 (xor)
signed 타입에서는 >>연산을 할 때 최상위 비트의 숫자는 변하지 않는다.
그러므로 비트연산은 unsigned 타입으로 하는 것이 좋다.
1110 을 28만큼 왼쪽으로 옮기고
0011 을 24만큼 왼쪽으로 옮긴 뒤
둘 다 Id와 | 연산을 해 준 결과이다.
'스터디 > C#' 카테고리의 다른 글
알아두면 유용한 기타 문법 (1) | 2021.11.09 |
---|---|
자료구조 맛보기 (1) | 2021.11.08 |
4일차 : 객체지향 여행 (1) | 2021.11.05 |
2일차 : 코드의 흐름 제어 (1) | 2021.11.02 |