using System;
namespace DataTypeTest
{
internal class DataTypeTest
// 우측 솔루션 탐색기 에서 이름 변경하면 클래스명이 변경됨
{
static void Main(string[] args)
{
// 자료형(데이터 타입)
// 정수형: int / sbyte / short / long => signed(부호있는)
// => sbyte(1바이트) : -128 ~ 127 사이의 정수 *그 이상이 되면 오버플로우 발생
// => short(2바이트) : -32,768 ~ 32,767 사이의 정수
// => int (4바이트) : -2,147,483,648 ~ 2,147,483,647 사이의 정수
// => long(8바이트) : -9,223,372,036,854,775,808 ~ 9,223372,036,854,775,807 (-2의64승 ~ 2의64승 까지)
// 메모리 값을 위해 적절한거 사용하기. 너무 큰거 쓰면 버벅거려
// unsigned(부호없는) => byte / ushort / uint / ulong
// => byte(1바이트) : 0~255 사이의 음이 아닌 정수
sbyte a = -10;
byte b = 40;
Console.WriteLine("a = " + a + ", b= " + b);
short c = -30000;
ushort d = 60000;
// c = 60000; //에러. 상수값이 short의 데이터 크기를 넘어감.
Console.WriteLine("c = " + c + ", d= " + d);
int e = -100000000; // 0이 7개
uint f = 3000000000; // 0이 8개
Console.WriteLine("e = " + e + ", f= " + f);
// e = 2147483648; //에러 => int의 데이터 크기 벗어남
long g = -500000000000; // 0이 11개
ulong h = 2000000000000000000; // 0이 18개. 주민등록번호 같은거 일 때
Console.WriteLine("g = " + g + ", h= " + h);
// 부동소수점 : 소수점이 고정되어 있지 않고 움직이면서 수를 표현한다. 고정 소수점보다 더 많은 숫자를 커버 가능. 정밀하다.
// 실수형 : float / double / decimal
// float(4바이트): 단일 정밀도 부동소수점 형식
// => 유효 자릿수 6~9
// double(8바이트): 복수 정밀도 부동 소수점 형식
// => 유효 자릿수 15~17
// decimal : 29자리 데이터를 표현할 수 있는 소수 형식
// => 통화량 등 금융 관련 데이터 저장에 유용
float x = 3.14f; //3.14만 놓으면 double 이라고 에러남. 뒤에 f 리터럴을 넣어줘야함. 대소문자 무관.
//리터럴: 숫자, 문자열 등 고정된 값. 코드에 직접 포함되는 값.
double y = 3.15;
decimal z = 3.141592m; //m 을 넣어줘야함
Console.WriteLine("x = " + x + ", y = " + y + ", z = " + z);
// ""=문자열, +=연결, z=변수값
// 컴파일을 한다 = 컴퓨터가 알아듣는 언어로 바꾸어준다.
// 빌드한다 = 프로그램을 사용 가능한 형태로 만든다. 빌드를 하면 .exe 파일이 생긴다. (디버깅 했을때 보이는 경로)
// 문자열 : string => 1개 이상의 문자를 사용 / "" 사용. 흔히 참조 자료형이라고 함. 클래스 라고 보면된다.
// 문자 : char(2바이트) => 단, 1개의 문자 사용 / ''사용
string s = "안녕하세요.";
char ch = '안';
char ch1 = '녕';
char ch2 = '하';
char ch3 = '세';
char ch4 = '요';
Console.WriteLine(s);
Console.WriteLine(ch + ch1 + ch2 + ch3 + ch4); //ch 안에 있는 유니코드 값을 다 더해서 표시됨. 문자도 숫자도 표시 가능
Console.Write(ch); //이렇게 하면 한 단어씩 그대로 기록됨. 줄바꿈 없음.
Console.Write(ch1);
Console.Write(ch2);
Console.Write(ch3);
Console.Write(ch4);
Console.WriteLine(); // 한 줄 띄기
// 논리형 : bool(1바이트) => true / false 값 사용
bool isTest = true; //is를 붙여준다.
Console.WriteLine(isTest);
// objest : 어떤 값이라도 할당할 수 있는 자료형. (클래스)
// objest 형식은 참조 형식 => 힙에 데이터를 할당한다.
// 스택 메모리 = 데이터가 저장이 되면 저장되는 순서로 쌓이고, 제거도 순서대로 되는데 참조형들은 힙 메모리에 저장된다. 스택메모리에는 뭐..가 저장된다고?
object obj = 1;
Console.WriteLine(obj);
obj = 3.14;
Console.WriteLine(obj);
obj = "Hello";
Console.WriteLine(obj);
obj = 'h';
Console.WriteLine(obj);
obj = true;
Console.WriteLine(obj);
// e = 3.14; => e는 정수형 변수인데 실수를 저장하려고 해서 에러. 데이터 타입이 선언된 자료형은 해당 데이터 타입으로만 가능 *obj 제외
// e = "Hello"; 에러.
e = 'c'; // 'c'는 아스키코드 값으로 저장 가능.
Console.WriteLine(e);
}
}
}
using System;
namespace _4._ConstTest
{
internal class Program
{
//열거형 Season 정의 **위치 주의. 클래스 아래 써줘야한다.
enum Season
{
spring, //0 (자동으로 값 지정됨. 단어 위에 마우스 올리면 값 보임)
summer, //1
autumn, //2
winter //3
}
enum Fruits
{
apple = 10, //값을 직접 할당 가능
orange = 100,
tomato =20
}
static void Main(string[] args)
{
Console.WriteLine("Hello, World!"); //빨간줄 에러일 때 알트+엔터로 유징시스템 사용해주기. 이 줄은 지워도 됨.
// 상수 : 변하지 않는 값
// const 자료형 상수명 = 값;
const int a = 3;
// const int b;
// b = 4; // 에러: 상수는 선언과 동시에 초기화가 되어야 함.
// a = 5; // 에러: 상수는 값을 변경 시킬 수 없다.
const double d = 3.14;
const string s = "abcdef";
Console.WriteLine("a=" + a + ",d=" + d + ",s=" + s);
// 열거 형식 : 상수들의 집합. 클래스 위치에 써줘야함
// => 기본적으로 연결된 상수값은 int 형이다.
// => 0으로 시작하고텍스트 순서에 따라서 1씩 증가하게 된다.
// => class 내부 또는 namespace 내부에서 선언 해야한다.
// => 새로운 타입(자료형)을 정의하는 것과 같음.
// enum 열거형식명 {상수1, 상수2, ....}
// 연결된 상수값을 명시적으로 지정도 가능함
// 열거 형식 변수 정의 => 열거형식명 변수형;
Season season;
season = Season.spring;
Console.WriteLine(season); // 열거형 멤버 이름으로 출력
season = Season.winter;
Console.WriteLine(season);
Console.WriteLine(Season.summer);
Fruits fruits;
fruits = Fruits.apple;
Console.WriteLine(fruits);
// var 키워드 : 변수 선언시 형식을 직접 선언한 것처럼 컴파일러가 형식을 결정.
// 컴파일러가 알아서 데이터 타입을 지정해주는 것을 키워드 라고 함.
// => var 변수명 = 값;
// => var 키워드는 선언과 동시에 초기화 해야한다.
int num = 20;
var num1 = 10;
Console.WriteLine(num1);
string str = "둘리";
var str1 = "고길동";
Console.WriteLine(str1);
}
}
}
using System;
namespace castingTest
{
internal class Program
{
static void Main(string[] args)
{
// "+"의 역할: 숫자+숫자 => 산술 연산
//숫자 + 문자 => 연결 연산
Console.WriteLine("5 + 3 =" + 5 + 3); // 5 + 3 = 53 으로 출력됨.
Console.WriteLine(5 + 3); //8 출력됨
Console.WriteLine(5 + 3 + "= 5 + 3"); // 8= 5 + 3 으로 출력됨. + 연산자 진행방향은 왼쪽->오른쪽이다.
Console.WriteLine("5 + 3 =" + (5 + 3)); // 5 + 3 =8 로 출력됨. () 가 있으면 우선순위 적용됨.
Console.WriteLine("5 * 3 =" + 5 * 3); // 5 * 3 =15. * 가 우선순위 적용됨.
Console.WriteLine("5 / 3 =" + 5 / 3); // 5 / 3 =1 로 나옴 정수와 정수의 연산은 값도 정수로 나옴.
Console.WriteLine("5.0 / 3 =" + 5.0 / 3); // 5.0 / 3 =1.6666666666666667 로 나옴. 실수와 정수의 계산은 정수를 실수로 인식해준다.
// Console.WriteLine("5 - 3 = " + 5 - 3) 에러: 문자열("5 - 3 = " + 5)에서 -3을 빼라는 얘기가 되니까.
Console.WriteLine("5 - 3 = " + (5 - 3)); // 정상 계산됨
Console.WriteLine("5 % 3 = " + 5 % 3); // 5 % 3 = 2 로 나옴. %는 나머지를 구하는 연산자이다.**중요
Console.WriteLine("5.0 / 3.0 = " + 5.0 / 3.0);
Console.WriteLine("5 / 3.0 = " + 5.0 / 3.0); // 형변환. 실수->정수 자동, 실수->정수 자동변환 불가
Console.WriteLine("=======================================");
// 형변환 : 변수 또는 상수 타입의 변수를 다른 타입으로 변환하는 것. 암시적 형변환 => 자동 형변환, 명시적 형변환 => 강제 형변환(식이 존재함)
// 암시적형변환(자동 형변환) : 특수 문구 필요 없음
// =>자료형의 크기가 서로 다른 경우 작은 쪽의 타입을 큰 쪽으로 자동 변환하는 것.
int myInt = 36;
float myFloat = 16.46f;
myFloat = myInt + myFloat; // 연산이 일어나기 전에 myInt는 float 타입으로 변환된다.
Console.WriteLine(myFloat);
long l = 134901930;
short s = 516;
double d = l - s;
Console.WriteLine(d);
// 134901414 출력됨. 그냥 lond 타입 값에서 S값을 뺀것임. "-" 연산자는 빼기만 한 것
// "=" 연산자가 연산 결과를 double 타입으로 변환한다.
d = d / 123.456;
Console.WriteLine(d); // 1092708.44673405914 출력됨. 실수가 됐으니까
d = d / 123;
Console.WriteLine(d); // 8883.808510033 출력됨.
long number = 139401930;
string text = "점수 : " + number;
// => + 연산자를 이용해 문자렬과 문자열이 아닌 타입을 연결하면 자동으로 문자열로 변환한다.
//text = number; 에러: 문자인데 string 타입으로 넣으려고 하니까
Console.WriteLine(text);
Console.WriteLine("A + 32 =" + ('A' + 32));
Console.WriteLine("a - 32 =" + ('a' - 32));
Console.WriteLine("=====================================");
Console.WriteLine("A + 32 = " + (Char)('A' + 32)); //97 앞에 Char 붙어있으니까 변형해서 a로 나타내짐
Console.WriteLine("a - 32 = " + (Char)('a' - 32));
// 강제 형변환(명시적 형변환) : 캐스트 식이 필요함
// => (변환할 타입)변수
float myFloatValue = 10.53f;
Console.WriteLine(myFloatValue);
int myIntValue =(int)myFloatValue;
Console.WriteLine("myFloatValue is "+ myFloatValue);
//Int형 값을 byte 타입에 캐스팅을 한 경우 오류는 나지 않지만, 최대값을 초과하게 되면 변수 값이 최솟값으로 초기화 된다.
int myIntValue2 = 365;
byte myByte = (byte)myIntValue2;
Console.WriteLine(myByte);
myIntValue2 = 256;
myByte = (byte)myIntValue2;
Console.WriteLine(myByte);
myIntValue2 = 257;
myByte = (byte)myIntValue2;
Console.WriteLine(myByte);
myInt = 10;
myByte = (byte)myInt;
double myDouble = (double)myByte; //명시적 형변환도 가능함
bool myBool = true;
//bool myBool = (bool)myDouble; 에러:myDouble 값이 bool에 들어가지 못함
//myByte = (Byte)myBool; 에러: bool 타입은 Double 타입으로 변환 못함.
short myShort = (short)myInt;
char myChar = 'x';
string myString = "false";
// myBool = (bool)mystring; 에러:
//myString = (string)myBool; 에러:
//myString = (string)myChar 에러
myString = myChar.ToString(); //해당 객체를 문자열로 바꾸는 메서드라서 에러 안남
// => 모든 객체가 가지고 있다.
myString = myInt.ToString();
long myLong = (long)myInt; //long이 int 보다 크니까 자동 형변환
decimal myDecimal = (decimal)myLong;
myString = myString + myInt + myByte + myDouble + myChar;
}
}
}
using System;
namespace _6._StringTest1
{
internal class StringTest1
{
static void Main(string[] args)
{
string str = "SeoulIt_Academy";
//IndexOf() : 현재 문자열 내에서 찾고자 하는 지정된 문자 또는 문자열의 위치를 찾음. => 첫번째 글자는 0부터 시작
// => 대소문자 구분하고 문자열이 없을 경우 -1을 반환한다.
Console.WriteLine(str.IndexOf("S"));
//LastIndexOf() : 현재 문자열 내에서 찾고자 하는 지정된 문자 또는 문자열의 위치를 뒤에서 부터 찾는다.
Console.WriteLine(str.LastIndexOf("a"));
// StarsWith() : 현재 문자열이 지정된 문자열로 시작하는지 평가
Console.WriteLine(str.StartsWith("S"));
Console.WriteLine(str.StartsWith("s"));
// EndsWith() : 현재 문자열이 지정된 문자열로 끝나는지 평가
Console.WriteLine(str.EndsWith("my"));
Console.WriteLine(str.EndsWith("m"));
// Contains() : 현재 문자열이 지정된 문자열을 포함하는지 평가
Console.WriteLine(str.Contains("It"));
// Replace() : 현재 문자열에서 지정된 문자열을 다른 문자열로 바꾼다.
Console.WriteLine(str.Replace("It","it"));
// ToLower () : 대문자 -> 소문자
// ToUpper () : 소문자 -> 대문자
Console.WriteLine(str.ToLower());
// Insert () : 현재 문자열에서 지정된 위치에 지정된 문자열을 삽입
Console.WriteLine(str.Insert(15, "홍대"));
// Console.WriteLine(str.Insert(16, "홍대")); 에러
//Remove() : 현재 문자열에서 지정된 위치로부터, 지정된 수만큼의 문자 삭제
str = " SeoulIt_Academy ";
// Trim() : 현재 문자열의 앞, 뒤 공백 제거
Console.WriteLine(str.Trim());
// TrimStrat () : 현재 문자열의 앞 공백 제거
// TrimEnd () : 현재 문자열의 뒷 공백 제거
//Split("구분자") : 현재 문자열을 지정된 문자를 기준으로 분리
// => 분리된 문자열은 배열로 저장됨.
str = "Seoul_It_Academy";
Console.WriteLine(str.Split("_")); //System.String[] 이렇게 나옴.
Console.WriteLine(str.Split("_")[0]); //지정한 문자열 기준으로. 배열의 0번째 있는것 출력
Console.WriteLine(str.Split("_")[1]);
Console.WriteLine(str.Split("_")[2]);
// Substring() : 현재 문자열의 지정된 위치로부터 지정된 수만큼 문자열 추출
Console.WriteLine(str.Substring(8));
Console.WriteLine(str.Substring(9,7));
// CompareTo() : 문자열 비교 => 같으면 0 / 다르면 1 또는 -1
// Equals() : 문자열 비교 => 같으면 true / 다르면 false
str = "토마토";
Console.WriteLine(str.CompareTo("바나나"));
Console.WriteLine(str.CompareTo("토마토"));
Console.WriteLine(str.Equals("바나나"));
//Length : 문자열의 길이 (개수)
str = "SeoulIt_Academy";
Console.WriteLine("str의 글자 개수: " + str.Length);
}
}
}
using System;
namespace StringTest2
{
internal class Program
{
static void Main(string[] args)
{
Console.Write("Hello~~");
string str = "C#";
Console.WriteLine(str);
// Format() 메소드 사용 : {인덱스[,정렬][:서식문자]}
// => 서식문자
// D/d(대소문자 구분 안함) : 10진수 / x : 16진수
// n : 1000단위 구분기호(",") / f : 고정 소수점
// e : 지수 / c : 통화서식 지정 / g : 숫자 일반형식
// p : 백분율 서식 지정 / r : 실수(라운드 트립 서식지정]
Console.WriteLine("어제부터 {1} {0}을 공부합니다."
, "우리는", str);
Console.WriteLine("어제부터 {0, -7} {1}을 공부합니다."
, "우리는", str);
Console.WriteLine("어제부터 {0, -4} {1}을 공부합니다."
, "우리는", str);
Console.WriteLine("어제부터 {0, 7} {1}을 공부합니다."
, "우리는", str);
int num = 1229;
string str2 = string.Format("Format() 메소드 연습중 : {0, -7:d}, {1}"
, num, str);
Console.WriteLine(str2);
str2 = string.Format("Format() 메소드 연습중 : {0, -7:x}, {1}"
, num, str);
Console.WriteLine(str2);
str2 = string.Format("Format() 메소드 연습중 : {0, -7:c}, {1}"
, num, str);
Console.WriteLine(str2);
str2 = string.Format("Format() 메소드 연습중 : {0, -7:n}, {1}"
, num, str);
Console.WriteLine(str2);
str2 = string.Format("Format() 메소드 연습중 : {0, -7:p}, {1}"
, num, str);
Console.WriteLine(str2);
str2 = string.Format("Format() 메소드 연습중 : {0, -7:f}, {1}"
, num, str);
Console.WriteLine("Format() 메소드 연습중 : {0, -7:f}, {1}"
, num, str);
int a = 10;
int b = 20;
Console.WriteLine("a = " + a + ", b = " + b);
Console.WriteLine("a = {0}, b = {1}", a, b);
}
}
}
'배워봅시다 > 기타(언어,prg등)' 카테고리의 다른 글
오캠 Ocam 고화질 녹화 설정 방법 (고품질, 크기 지정, 워터마크,코덱) (0) | 2025.01.07 |
---|---|
C#_3일차 (1) | 2024.01.02 |
C#_1일차 (1) | 2024.01.02 |
댓글