C\#.net 의 유형 변환 에 대한 상세 한 소개
1.포장,분해 또는 별명
많은 C\#.NET 의 책 에는 int->Int 32 를 포장 하 는 과정 이 있 고,반대로 상 자 를 뜯 는 과정 이 있다.많은 다른 변수 유형 도 마찬가지 입 니 다.예 를 들 어 short<->Int 16,long<->Int 64 등 입 니 다.일반적인 프로그래머 에 게 는 이 과정 을 이해 할 필요 가 없다.왜냐하면 이 포장 과 상 자 를 뜯 는 동작 은 모두 자동 으로 완성 할 수 있 기 때문에 코드 를 써 서 관여 할 필요 가 없다.그러나 우 리 는 이러한 유형 간 의 관 계 를 기억 해 야 하기 때문에 우 리 는'별명'으로 그들의 관 계 를 기억 해 야 한다.
C\#는 대상 을 전면적으로 대상 으로 하 는 언어 로 자바 의 대상 보다 더 철저 합 니 다.간단 한 데이터 형식 을 기본 적 인 포장 동작 을 통 해 클래스 로 패키지 합 니 다.Int 32,Int 16,Int 64 등 은 해당 하 는 유형 명 이 고 우리 가 익숙 하고 기억 하기 쉬 운 이름,예 를 들 어 int,short,long 등 은 Int 32,Int 16,Int 64 등 유형의 별명 이 라 고 할 수 있다.
그렇다면 이 세 가지 유형 외 에 또 어떤 유형 이'별명'이 있 을 까?자주 사용 하 는 것 은 다음 과 같다.
bool->System.Boulean(불 형,그 값 은 true 또는 false)char->System.Char(문자 형,두 바이트 차지,유 니 코드 문자 1 개 표시)byte->System.Byte(바이트 형,1 바이트 차지,8 비트 정수 표시,범위 0~255)sbyte->System.Spite(기호 바이트 형,1 바이트 차지,8 비트 정수 표시,범위-128~127)ushort->System.UInt 16(기호 없 는 짧 은 정형,2 바이트,16 비트 의 정수,범위 0~65,535)uint->System.UInt 32(기호 없 는 정형,4 바이트,32 비트 의 정수,범위 0~4,294,967,295)ulong->System.UInt 64(기호 없 는 긴 정형,8 바이트,64 비트 의 정수,범위 0~약 10 의 20 제곱)short->System.Int 16(짧 은 정형,2 바이트,16 비트 정수,범위-32,768~32,767)int->System.Int 32(정형,4 바이트,32 비트 정수,범위-2,147,483,648 에서 2,147,483,647)long->System.Int 64(긴 정형,8 바이트,64 비트 정수,범 위 는 약-(10 의 19)차방 에서 10 의 19 차방)float->System.single(단일 정밀도 부동 소수점 형,4 바이트 차지)double->System.Double(2 정밀도 부동 소수점 형,8 바이트 차지)우 리 는 다음 코드 로 실험 을 할 수 있 습 니 다.
private void TestAlias() {
// this.textBox1 , System.Windows.Forms.TextBox
// Multiline true
byte a = 1; char b = 'a'; short c = 1;
int d = 2; long e = 3; uint f = 4; bool g = true;
this.textBox1.Text = "";
this.textBox1.AppendText("byte -> " + a.GetType().FullName + "
");
this.textBox1.AppendText("char -> " + b.GetType().FullName + "
");
this.textBox1.AppendText("short -> " + c.GetType().FullName + "
");
this.textBox1.AppendText("int -> " + d.GetType().FullName + "
");
this.textBox1.AppendText("long -> " + e.GetType().FullName + "
");
this.textBox1.AppendText("uint -> " + f.GetType().FullName + "
");
this.textBox1.AppendText("bool -> " + g.GetType().FullName + "
");
}
창 에 단 추 를 새로 만 들 고 이 단 추 를 누 르 면 이벤트 에서 이 TestAlias()함 수 를 호출 할 수 있 습 니 다.우 리 는 운행 결 과 를 다음 과 같이 볼 것 이다.
byte -> System.Byte
char -> System.Char
short -> System.Int16
int -> System.Int32
long -> System.Int64
uint -> System.UInt32
bool -> System.Boolean
이것 은 각 별명 에 대응 하 는 종 류 를 설명 하기에 충분 하 다!2.수치 유형 간 의 상호 전환
여기 서 말 하 는 수치 유형 은 byte,short,int,long,fload,double 등 을 포함 하 는데 이 배열 순서에 따라 각종 유형의 값 은 순서대로 뒤로 자동 으로 전환 할 수 있다.예 를 들 어 short 형의 데 이 터 를 int 형의 변수 에 할당 하면 short 값 은 자동 으로 int 형 값 으로 변환 되 고 int 형 변 수 를 부여 합 니 다.다음 과 같은 예:
private void TestBasic() {
byte a = 1; short b = a; int c = b;
long d = c; float e = d; double f = e;
this.textBox1.Text = "";
this.textBox1.AppendText("byte a = " + a.ToString() + "
");
this.textBox1.AppendText("short b = " + b.ToString() + "
");
this.textBox1.AppendText("int c = " + c.ToString() + "
");
this.textBox1.AppendText("long d = " + d.ToString() + "
");
this.textBox1.AppendText("float e = " + e.ToString() + "
");
this.textBox1.AppendText("double f = " + f.ToString() + "
");
}
번역 이 순조롭게 통과 되 었 고 운행 결 과 는 각 변수의 값 이 모두 1 이다.물론 이들 의 유형 은 각각 System.Bite 형...System.Double 형 이다.이제 우리 한번 해 보 자.할당 순 서 를 거꾸로 하면 어 떨 까?TestBasic()함수 에 다음 문 구 를 추가 합 니 다.
int g = 1;
short h = g;
this.textBox1.AppendText("h = " + h.ToString() + "
");
결과 컴 파일 오류:G:\\Projects\\Visual C\#\Convert\\Form1.cs(118):형식"int"은 식 을"short"로 변환 할 수 없습니다.
그 중에서 Form1.cs 의 118 줄 즉 short h=g 에 익숙 하 다.
이 럴 때 우리 가 변환 을 고집 한다 면 강제 형식 변환 을 사용 해 야 한다.이 는 C 언어 에서 흔히 언급 되 는데'(유형 명)변수 명'형식의 문 구 를 사용 하여 데 이 터 를 강제 변환 하 는 것 이다.예 를 들 어 상기 수정 은 다음 과 같다.
short g = 1;
byte h = (byte) g; // short g short h
this.textBox1.AppendText("h = " + h.ToString() + "
");
컴 파일 을 통 과 했 고 실행 결 과 는 h=1 을 출력 하여 변환 에 성공 했다.그러나 우리 가 강제 전환 을 사용한다 면 short 형의 범 위 는-32768~23767 이 고 byte 형의 범 위 는 0~255 이다.그러면 변수 g 의 크기 가 byte 형의 범 위 를 초과 하면 어떤 상황 이 발생 할 까?코드 를 다시 한 번 고 쳐 서 값 을 265 로 바 꾸 는 것 도 좋 습 니 다.255 보다 10
short g = 265; //265 = 255 + 10
byte h = (byte) g;
this.textBox1.AppendText("h = " + h.ToString() + "
");
컴 파일 에 오류 가 없 지만 실행 결 과 는 h=265 가 아니 라 h=9 입 니 다.따라서 우 리 는 전환 을 할 때 변 환 된 데이터 가 목표 유형의 범 위 를 초과 해 서 는 안 된다 는 것 을 주의해 야 한다.이 는 다 중 바이트 데이터 형식(상대,예 를 들 어 상례 의 short)이 작은 바이트 형식(상대,예 를 들 어 상례 의 byte)으로 바 뀌 었 을 때 도 바이트 수가 같은 기호 유형 과 부호 가 없 는 유형 사이 에 나타난다.예 를 들 어 byte 의 129 를 sbyte 로 바 꾸 면 넘친다.이 방면 의 예 는 대동소이 해서 상세 하 게 설명 하지 않 겠 다.
3.문자 의 ASCII 코드 와 유 니 코드 코드
영어 문자 의 ASCII 코드 나 한자 문자 의 유 니 코드 코드 를 받 거나 관련 인 코딩 에서 어떤 문자 의 인 코딩 인지 조회 해 야 할 때 가 많 습 니 다.많은 사람들 이 특히 VB 프로그램 순서 에서 C\#를 배 우 는 사람 은 C\#에서 왜 기 존의 함 수 를 제공 하지 않 았 는 지 원망 한다.VB 에 Asc()함수 와 Chr()함수 가 있 기 때문이다.
그러나 만약 에 C 를 배 웠 다 면 우 리 는 영문 문자 형 데 이 터 를 적당 한 수치 형 데이터 로 강제로 변환 하면 해당 하 는 ASCII 코드 를 얻 을 수 있다 는 것 을 알 게 될 것 이다.반대로 적당 한 수치 형 데 이 터 를 문자 형 데이터 로 강제로 변환 하면 해당 하 는 문 자 를 얻 을 수 있다.
C\#에서 문자 의 범위 가 확대 되 었 습 니 다.단일 바이트 문자 뿐만 아니 라 중국어 문자 등 두 바이트 문자 도 포함 할 수 있 습 니 다.문자 와 인 코딩 사이 의 전환 은 C 언어의 방법 인 강제 전환 을 지연 시 켰 다.아래 의 예
private void TestChar() {
char ch = 'a'; short ii = 65;
this.textBox1.Text = "";
this.textBox1.AppendText("The ASCII code of \'" + ch + "\' is: " + (short) ch + "
");
this.textBox1.AppendText("ASCII is " + ii.ToString() + ", the char is: " + (char) ii + "
");
char cn = ' '; short uc = 22478;
this.textBox1.AppendText("The Unicode of \'" + cn + "\' is: " + (short) cn + "
");
this.textBox1.AppendText("Unicode is " + uc.ToString() + ", the char is: " + (char) uc + "
");
}
를 살 펴 보 자.그 운행 결 과 는
The ASCII code of 'a' is: 97
ASCII is 65, the char is: A
The Unicode of ' ' is: 20013
Unicode is 22478, the char is:
이 예 에서 우 리 는 강제 변환 을 통 해 문자 의 인 코딩 을 얻 거나 인 코딩 으로 표 시 된 문 자 를 잘 알 수 있다.만약 당신 이 필요 로 하 는 것 이 short 형의 인 코딩 이 아니라면 제1조 를 참고 하여 변환 하면 int 등 유형의 인 코딩 값 을 얻 을 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
사례를 통해python 오리 유형의 관련 원리를 분석하다프로그래밍에서 오리 유형(영어:duck typing)은 동적 유형의 한 스타일이다.이런 스타일에서 하나의 대상의 효과적인 의미는 특정한 종류를 계승하거나 특정한 인터페이스를 실현하는 것이 아니라 현재의 방법과 속성의...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.