//사칙연산 + - * / % ++ --
//c++과 다른 건 %(나머지)
//int는 같은데
int i1 = 32;
int i2 = 5;
Console.WriteLine("{0} % {1} = {2}", i1, i2, i1 % i2);
//float도 가능 해지게 됐다.
float f1 = 3.14f;
float f2 = 0.7f;
Console.WriteLine("{0} % {1} = {2}", f1, f2, f1 % f2);
//아래 ++ 연산은 c++과 같다.
int n0 = 10;
int n1 = n0;
Console.WriteLine("n0 = {0}, n1 = {1}", n0, n1); //10, 10
n1 = n0++;
Console.WriteLine("n0 = {0}, n1 = {1}", n0, n1); //11, 10;
n1 = ++n0;
Console.WriteLine("n0 = {0}, n1 = {1}", n0, n1); //12, 12;
//배열
//int a[10]; //c++ 에서는 이렇게만...
//c++ 에서는 배열을 자료형의 집합 이라고 생각하면 되지만
//C#에서는 int와 int[]를 별도의 타입으로 생각하는 것이 낫다.
int[] aa = new int[5]; //모두 0으로 초기화 (c++에서는 쓰레기 값이 들어갔었다.)
int[] bb = new int[5] { 10, 20, 30, 40, 50 };
int[] cc = new[] { 10, 20, 30, 40, 50, 60, 70 };
int[] dd = { 1, 2, 3, 4 };
//2차원 배열
int[,] aaa = new int[3, 2]; //int[2]가 3개 있음
int[,] aaa2 = new int[3, 2] { { 1, 2 }, { 2, 3 }, { 3, 5 } }; //초기화
'공부 > C#' 카테고리의 다른 글
switch (0) | 2016.05.04 |
---|---|
사칙연산 (0) | 2016.05.04 |
데이터 타입 (0) | 2016.05.04 |
string 처리 기본 (0) | 2016.05.04 |
[잡담]C# 공부 첫날 소감 (0) | 2016.05.03 |
//데이터 타입
//c++이랑은 좀 차이가 있다.
//string
//c++에서는 기본적으로 없고 STL로 구현되어있다.
//C#에서 메모리 구조상에서 바뀌지 않는다. 새로 메모리 공간을 만든다.
//string str = string.Format("string test : {0} {1} {0}", 10, "문자");
//Console.WriteLine(str);
//int형 크기, 최소값, 최대값
//Console.WriteLine("int : {0} byte {1} ~ {2}" ,
// sizeof(int), int.MinValue, int.MaxValue); //int
Console.WriteLine("int : {0} byte {1:N} ~ {2:N}", //N 기본 숫자 포맷팅 정수 셋째 자리마다 , 소수점아래 2자리
sizeof(int), int.MinValue, int.MaxValue); //int
Console.WriteLine("uint : {0} byte {1:N} ~ {2:N}",
sizeof(uint), uint.MinValue, uint.MaxValue); //unsigned int
Console.WriteLine("long : {0} byte {1:#,#} ~ {2:#,#}", //#,#만 하면 소수점 없이 숫자 포맷 가능
sizeof(long), long.MinValue, long.MaxValue); //long
//UInt16; UInt32; UInt64; //숫자 bit짜리 int;
Console.WriteLine("decimal : {0} byte {1:#,#} ~ {2:#,#}", //#,#만 하면 소수점 없이 숫자 포맷 가능
sizeof(decimal), decimal.MinValue, decimal.MaxValue); //10진수
Console.WriteLine("byte : {0} byte {1} ~ {2}",
sizeof(byte), byte.MinValue, byte.MaxValue); //byte 0 ~ 255
Console.WriteLine("sbyte : {0} byte {1} ~ {2}",
sizeof(sbyte), sbyte.MinValue, sbyte.MaxValue); //sbyte -128 ~ 127
//char
//C#에서는 타입 체킹이 엄격하다.
//기본적으로 unicode를 사용한다.
//글자 하나를 받는 의미가 크다.
char a = '글'; //그래서 한글도 들어갈 수 있다.(c++에서는 한글은 2byte가 필요한데 char는 1byte이다.)
char b = 'a';
Console.WriteLine("char : {0} byte {1} ~ {2}",
sizeof(char), char.MinValue, char.MaxValue); //char \0 ~ 0xffff
Console.WriteLine("float : {0} byte {1} ~ {2}",
sizeof(float), float.MinValue, float.MaxValue); //float
Console.WriteLine("double : {0} byte {1} ~ {2}",
sizeof(double), double.MinValue, double.MaxValue); //double
Console.WriteLine("bool : {0} byte {1} ~ {2}",
sizeof(bool), bool.FalseString, bool.TrueString); //bool
//데이터 타입 끝
'공부 > C#' 카테고리의 다른 글
사칙연산 (0) | 2016.05.04 |
---|---|
배열 (0) | 2016.05.04 |
string 처리 기본 (0) | 2016.05.04 |
[잡담]C# 공부 첫날 소감 (0) | 2016.05.03 |
정수, 실수 출력 (0) | 2016.05.03 |
string 처리 기본
//안좋은 string 더하는 방식 - 메모리 낭비가 심함
string str1 = "Hello";
string str2 = "World";
Console.WriteLine(str1 + " " + str2);
//좋은 string 더하는 방식
//StringBuilder builder = new StringBuilder(); //C#에서 무조건 주소만 존재한다. class는 new 안해주면 생성되지 않는다.
StringBuilder builder = new StringBuilder(10); //공간을 잡아주는것이 좋다. AppendFormat 기본 잡아준 공간을 넘어가면 다시 생성되어 공간 확보하므로 메모리 낭비가 될수 있다.
builder.AppendFormat(str1);
builder.AppendFormat(" ");
builder.AppendFormat(str2);
Console.WriteLine(builder.ToString()); //웬만한 타입은 String으로 변환 가능하다
Console.WriteLine(builder); //.ToString() 생략 가능
builder.Remove(1, 2); //1번 인덱스 부터 2개 글자 제거
Console.WriteLine(builder);
//글자 뒤에 다시 타입별로 추가
builder.AppendFormat(" {0} {1}", a, str1); //0은 int , str1은 string
Console.WriteLine(builder);
Console.WriteLine("1을 입력하시오");
string read = Console.ReadLine();
Console.WriteLine("입력 받은 것 : " + read);//안좋은 방식이지만 사람이 쓰기엔 편하다.
//비교
//if( read == "1" )
//string 값 간의 비교는 연산이 너무 많아 진다.
//숫자라고 한다면 int는 값비교가 한번에 된다.
//어지간해선 string간의 비교는 하지 말자.
//들어온 숫자 string을 int형으로 변환
int readNum = Int32.Parse(read);
//숫자가 아닌것에 대해 예외처리 안되어있다. 나중에 다시 알아 보자.
//숫자가 아니면 터진다.나중에 다시 알아 보자.
//C#은 기본적으로 Unicode이므로 특수문자에 제약이 없다.
if(readNum == 1)
{
Console.WriteLine("● 1이 입력 되었습니다.");
}
else
{
Console.WriteLine("◐ 1이 아닙니다.");
}
[잡담]C# 공부 첫날 소감
//잡담
대학생일 때 C, C++, Java는 기본적으로 많이 건드렸었고
주언어를 Java로 하여 JSP와 연동되는
많은 서버계열 언어들과 프레임워크를 회사에서도 꽤 다루어 본데다가
작년 부터 게임 개발로 돌아서면서 C++쪽을 많이 하여
슬슬 Java같은 언어의 사용법이 C++에 뭍혀 가고 있었는데....
그런데 이제 Unity 개발을 시작하려고
C#에 처음 입문을 하였는데
느낌이 마치... 고향에 돌아와 공기를 마시는 느낌(?) 같았다.
Java와 꽤 비슷하여 c++로만 다룬 몇개월의 늪에서 다시 회생한기분 이다.
개비지컬렉션, 클래스 생성방법, 포인터 없는 것 하며
사용법 대부분이 Java 비스무리하여
C++보다 꽤 쉽다.
훅훅 습득이 된다.
예전부터 C++과 Java 2가지 언어를 알게 되면
나머지 모르는 언어도 쉽게 접근 할 수 있다고 생각하고 있었지만
역시나 그렇다.
쉽다. 간편하다. 새롭지만 낯설고 신기하다.
대부분 아는 내용이기 때문에
이 C#페이지에서는
C++과 차이가 생기는 부분에 대한것을
주로 포스팅을 하자.
int a = 1;
int b = 2;
Console.WriteLine(a + "+" + b + "=" + a + b); //1+2=12
Console.WriteLine(a + "+" + b + "=" + (a + b)); //1+2=3 <= 괄호 안에 있는게 먼저 실행 됨. (우선순위를 높인다.)
//칸수 맞추기
int number = 255;
Console.WriteLine("Number : {0}", number); //십진수 기본
Console.WriteLine("Number : {0,10:D5}", number); //10칸을 공간으로 잡는데 뒤에 5개는 숫자를 채워라(우측정렬)
Console.WriteLine("Number : {0,10}", number); //10칸을 공간으로 잡아 숫자 우측 정렬
Console.WriteLine("Number : {0,-5}|||||{0}", number); //좌측 정렬 5개의 공간 확보
Console.WriteLine("Number : {0:X}", number); // 16진수 출력
Console.WriteLine("Number : {0:X4}", number); // 16진수 4자리 출력하는데 빈 곳은 0으로 처리
Console.WriteLine("Number : {0,4:X}||", number); // 4자리를 확보하고 16진수 출력.우측정렬(||는 자리 표시 위한 것 의미 없음)
Console.WriteLine("Number : {0,-4:X}||", number); // 4자리를 확보하고 16진수 출력.좌측정렬(||는 자리 표시 위한 것 의미 없음)
//실수형 변수
//float f = 1.0f; //float 형
//float f2 = 1.0; //에러 발생 : c++에서는 뒤에 f를 안붙여 줘도 처리 됐지만, c#에서는 타입체크를 까다롭게 해줘야 한다.
//double d = 1.0; //double형
float f = 1.12345f;
double d = 2.12345;
Console.WriteLine("float : {0}, double : {1}", f, d);
Console.WriteLine("float : {0}", f.ToString("F3")); //소수점 3쨰자리까지 출력
//반올림
f = (float)Math.Round(f, 4);
Console.WriteLine("반올림 : {0}", f);
//올림 = 정수
Console.WriteLine("올림 : {0}", Math.Ceiling(f));
//버림 - 정수
Console.WriteLine("버림 : {0}", Math.Floor(f));
'공부 > C#' 카테고리의 다른 글
배열 (0) | 2016.05.04 |
---|---|
데이터 타입 (0) | 2016.05.04 |
string 처리 기본 (0) | 2016.05.04 |
[잡담]C# 공부 첫날 소감 (0) | 2016.05.03 |
C# 첫 경험 (0) | 2016.05.03 |
//c++ 과 java의 혼종 같은 언어가 c#이다.
//########## 잡담 ##########
/*
c언어(절차지향)는 a언어, b언어 다음에 나온 언어라서 c언어이다.
c++ 은 c언어에서 발전(객체지향)
C#은 c++에서 더 발전(객체지향)
++++을 2단으로
++
++
하면 큰 #이 된다더라......
*/
//######## 잡담 끝 #########
//뒤에 있는 namespace들을 사용하겠다.
//c, c++의 #include 와 비슷하다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//c++의 namespace 자체와는 같긴 같다.
//일종의 라이브러리 한 단위하고 보면 된다.
//클래스를 카테고리 별로 나눴다고 생각 하면 편하다.
namespace Day01
{
class Program
{
//Program 에 있는 main()함수가 먼저 동작 한다.
//static은 있어야 한다. Program을 생성하지 않았지만 main()은 동작 해야 하기 때문이다.
//string[] args : 아규먼트, 콘솔 실행시 뒤의 인자값 넣어 string의 배열로 받아올 수 있다.
static void Main(string[] args)
{
//c++과는 다르게 자동완성이 장난 아니게 잘되어 있다.
Console.Write("Hello World\n"); //\n으로 개행 가능
Console.WriteLine("Hello World2"); //한줄 단위로 쓸때.. 알아서 개행이 된다
//string input = Console.ReadLine(); //입력을 받아서 input변수에 넣는다.
//Console.WriteLine(input); //input변수를 출력
int i = 10;
int j = i;
j++;
Console.WriteLine("i : {0} j : {1}", i, j); //i와 j 출력 방법
//{, } 출력
Console.WriteLine("i : {{0}} j : {1}", i, j); //틀린방법 : {0} 자체가 문자로 인식 됨
Console.WriteLine("i : {{{0}}} j : {1}", i, j); //되는방법 : {{가 {로 인식. }} 는 } 하나로 인식
Console.WriteLine("i : {{{{0}}}} j : {1}", i, j); //틀린방법 : {{0}} 자체가 문자로 인식 됨
Console.WriteLine("i : {{{{{0}}}}} j : {1}", i, j); //되는방법
string line = string.Format("{0} {1}", i, j); //포맷에 맞게 변수에 저장도 가능
Console.WriteLine(line);
//안좋은 방법
Console.WriteLine("i : " + i + " j : " + j); //스트링 까지 다 +로 이어질 수 있다.
//string 은 변경 불가능한 변수이다.(메모리 상)
//string a = "1234";
//a = "1234" + "abcd";
//위처럼 가능하나 메모리 상태에서는
//처음 "1234"위 공간을 만들고
//아래에서 +로 더할 떄 별도의 "1234"와 "abcd"를 메모리공간에 다시 만들고
//"1234abcd"로 더한 메모리 공간을 다시 만들고 이 주소값을 변수 a가 가르키게 만들 뿐이다.
//메모리 공간 낭비가 심하다.
//나중에 개비지컬렉터가 삭제 해주긴 하지만 개비지컬렉터가 언제 지울지 모르는 것이다.
int a = 1;
int b = 2;
Console.WriteLine(a + "+" + b + "=" + a + b); //1+2=12
Console.WriteLine(a + "+" + b + "=" + (a + b)); //1+2=3 <= 괄호 안에 있는게 먼저 실행 됨. (우선순위를 높인다.)
Console.ReadLine();
}
}
}
'공부 > C#' 카테고리의 다른 글
배열 (0) | 2016.05.04 |
---|---|
데이터 타입 (0) | 2016.05.04 |
string 처리 기본 (0) | 2016.05.04 |
[잡담]C# 공부 첫날 소감 (0) | 2016.05.03 |
정수, 실수 출력 (0) | 2016.05.03 |
렌더몽키 다운로드 url
셰이더 관련 툴
http://developer.amd.com/tools-and-sdks/archive/legacy-cpu-gpu-tools/rendermonkey-toolsuite/
사이트 하단에 다운로드 할수 있는 링크 있음(AMD사에서 제공)
버전은 2008년도 12월 18일 부터 업데이트 되고 있지 않음.
Direct 3D
SGA
'공부 > DirectX' 카테고리의 다른 글
렌더몽키 다운로드 url (0) | 2016.04.24 |
---|
에일리언 타워 디펜스 - WinApi 포폴 1주 팀
사용 언어 : C++ (WinApi)
제작 기간 : 2015.12. 23 ~ 2015. 12. 30 (1주)
제작 인원 : 4명 (손정현(본인), 오창소, 김민제, 이두리)
본인 프로그래밍 담당 : 인게임 플레이어 영역(플레이어 UI, 타워 시스템, 액티브 스킬)
[스크린샷]
[동영상]
유튜브 주소 : https://youtu.be/wurYygQ9A0k
배운 점 및 느낀 점 :
1. png 이미지를 사용하면 퀄리티가 더 높고 비트맵보다 용량이 적어짐.
2. 크리스마스의 연휴가 껴서 작업 시간이 많이 없었지만 밤을 새면 어떻게든 됨을 느낌
3. 따로 하는 것보다 모여서 하면 일의 능률 상승.
4. 플래시 게임 원작의 이미지를 그래로 다 가지고 올수 있어서 리소스 작업에 시간 투자가 거의 없었음.
5. 플레이어 UI가 깔끔하면 게임이 재밌어지고 친절함을 느낌.
6. 레벨, 데미지 벨런싱도 하나의 일.
프로젝트가 끝나고 스스로 나아진 점:
1. 팀원들간의 커뮤니케이션 능력 향상
2. 밤을 오래 샐 수 있는 체력.
3. 모르는 기능을 찾아낼 수 있는 구글링 실력.
4. 객체 지향 적 프로그래밍 기법 실력 향상.
5. 상속 관계의 클래스 사용법 숙달.