반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 컴퓨터공학
- 빅데이터
- 자바스크립트
- 데이터과학
- 클라우드컴퓨팅
- 프로그래밍언어
- 데이터베이스
- 데이터구조
- 자료구조
- 사이버보안
- 네트워크
- 소프트웨어
- 보안
- 데이터분석
- 머신러닝
- 소프트웨어공학
- 프로그래밍
- 인공지능
- 컴퓨터비전
- Yes
- 알고리즘
- 2
- 딥러닝
- 파이썬
- 네트워크보안
- 버전관리
- 컴퓨터과학
- 웹개발
- 코딩
- I'm Sorry
Archives
- Today
- Total
스택큐힙리스트
왜 Array.Length는 int이고 uint가 아닌가 [중복] 본문
반응형
왜 Array.Length
는 int이고 uint
가 아니죠. 이게 조금 거슬리네요. 길이 값은 결코 음수가 될 수 없는데...
내가 만든 클래스의 길이 속성에도 이를 대비해 int를 사용해야 했고, int 값을 지정할 때 명시적으로 캐스팅해야 했습니다...
그래서 궁극적인 질문은: 부호 없는 정수(uint
)를 사용하는 용도가 있을까요? 심지어 Microsoft도 그걸 사용하지 않는 것 같습니다.
답변 1
Unsigned int은 CLS compliant하지 않으며, 따라서 UInt
를 구현하는 언어만 속성의 사용을 제한할 것입니다.
여기를 참조하세요:
Framework 1.1
.NET Framework Class Library 소개
Framework 2.0
.NET Framework Class Library 개요
답변 2
배열의 길이를 나타내는 속성인 Array.Length가 int형이지 uint형이 아닌 이유에 대해 알아보자.처음으로, Array.Length 속성은 배열의 요소 개수를 나타내는 것으로, 속성의 반환 형식은 int입니다. 이렇게 구현된 이유는 여러 가지 이유가 있습니다.
첫째, C#에서 배열의 인덱스는 양의 정수값만을 허용합니다. 이것은 uint의 경우 음수 값을 제외한 양수만을 나타낼 수 있기 때문에 배열의 인덱스로 사용하기에는 제한 사항이 있을 수 있습니다. 따라서 int 형식을 사용함으로써 양수와 음수를 모두 표현할 수 있어 배열 인덱스에 대한 더 유연한 사용을 가능하게 합니다.
둘째, Array.Length 속성의 반환 형식은 uint형보다 int형이 훨씬 널리 사용되기 때문입니다. C#과 .NET 프레임워크는 기본적으로 int를 사용하는 경우가 많아서, 코드의 일관성을 유지하기 위해 Array.Length도 int로 구현되었습니다. 만약 uint를 반환형으로 사용했다면 다른 코드와의 호환성이 떨어지게 되고, 변환에 따른 오버헤드도 발생할 수 있습니다.
셋째, int 형식은 메모리 공간을 덜 차지하기 때문입니다. uint 형식은 int와 거의 동일한 크기를 가지지만, 부호 비트를 포함하지 않기 때문에 한 비트를 더 사용합니다. 배열의 길이는 일반적으로 음수가 될 수 없으므로, 음수 값을 표현할 필요가 없는 uint보다 int가 더 효율적입니다.
이러한 이유로, C#에서는 배열의 길이를 나타내는 Array.Length 속성을 int로 구현하게 되었습니다. int 형식은 양수와 음수를 모두 표현할 수 있고, 코드의 일관성과 호환성을 유지하는 동시에 메모리 공간을 절약할 수 있기 때문에 우수한 선택입니다.
반응형
Comments