티스토리 뷰

C#이 제공하는 기본 데이터 형식에는 모두 15가지가 있다.

이들은 크게 숫자 형식, 문자열 형식, 논리 형식, 오브젝트 형식으로 나누어진다.

이 중에서 문자열과 오브젝트 형식만 참조 형식에 해당하며, 나머지는 모두 값 형식이다.

 

숫자 데이터 형식

 프로그래밍을 하면서 가장 많이 다루는 데이터 형식.
 텍스트 데이터도 알고 보면 각 문자 하나 하나가 내부적으로 숫자 코드로 되어 있다.(아스키 코드 참조)

 C#은 15가지 기본 자료 형식 중 12가지를 숫자 데이터 형식으로 제공한다.

 이 12가지는 다시 "정수", "부동 소수", "소수" 이렇게 3가지로 나뉘게 된다.

 

정수 계열 형식

 이름처럼 정수 데이터를 담기 위해 사용.

 12가지의 숫자 형식 중 9가지가 정수 계열 형식이다.

 왜냐면 9가지의 정수 형식은 각각 크기와 담을 수 있는 데이터의 범위가 다른데

 프로그래머로 하여금 용도에 맞는 것을 골라 메모리를 효율적으로 사용하도록 하기 위함이다.

데이터 형식 설명 크기 담을 수 있는 값 범위
byte 부호 없는 정수 1(8비트) 0~255
sbyte signed byte 정수 1(8비트) -128~127
short 정수 2(16비트) -32,768~37,767
ushort

unsigned short 부호 없는 정수

2(16비트) 0~65,535
int 정수 4(32비트) -2,147,483,648~2,147,483,647
uint unsigned int 부호 없는 정수 4(32비트) 0~4,294,967,295
long 정수 8(64비트)

-922,337,203,685,477,508~

922,337,203,685,477,507

ulong unsigned long 부호 없는 정수 8(64비트) 0~18,446,744,073,709,551,615
char 유니코드 문자 2(16비트)  

 

바이트(byte)
거의 모든 컴퓨터는 8비트(bit) = 1바이트(byte)로 취급한다.
 129(10진수) = 1000 0001(2진수)
바이트 단위가 중요한 이유는 이것이 컴퓨터가 데이터를 다루는 기본 단위이기 때문이다.
메모리의 주소도, CPU가 한번에 처리하는 데이터의 크기도 바이트를 기본으로 하고 있다.

 

부호 있는 정수와 부호 없는 정수

 부호 있는 정수는 음의 영역까지 다루는 것, 부호 없는 정수는 0과 양의 영역만을 다루는 것을 의미한다.

 그런데 똑같은 1바이트를 사용하는데도 부호 있는 정수 sbyte는 -128~127을 담을 수 있고,

 부호 없는 정수 byte는 0~255까지 담는 이유는 뭔지 궁금하다.

 똑같이 1바이트, 즉 8비트로 이루어져 2^8 = 256가지의 수를 표현할 수 있는데 말이다.

 그것은 byte는 8비트를 모두 수를 표현하는데 사용하고

 sbyte는 7비트만 수를 표현하는데 사용하고 1비트는 부호를 표현하는데 사용하기 때문이다.

숫자 비트
0 0 0 0 0 0 0 0 0
127 0 1 1 1 1 1 1 1

 0부터 127까지는 byte와 sbyte가 비트를 동일하게 사용한다. 왜냐면 남은 1비트를 사용할 일이 없기 때문이다.

 sbyte에서 남은 1비트는 부호를 나타내기 위해 사용하는데 0이면 양수 1일 때는 음수이다.

 여기서 sbyte 형식을 사용했을 때 비트의 모든 값이 1이라면 어떤 수를 담고 있는 것일까?

 -127이라고 생각할 수도 있겠는데 -1이 정답이다. 왜냐하면 정수형 데이터 형식은 2의 보수법이라는 알고리즘을

 채택하여 음수를 표현하기 때문이다. 2의 보수법을 이용해 음수를 표현하는 방법은 다음과 같다.

    1. 먼저 수 부분 비트를 채운다.

    2. 전체 비트를 반전시킨다.

    3. 반전된 비트에 1을 더한다.

 -1을 예로 들어 봐야겠다.

 

비트 비고
0 0 0 0 0 0 0 1 1을 수 부분 비트에 입력
1 1 1 1 1 1 1 0 8개의 비트 전체를 반전
1 1 1 1 1 1 1 1 반전된 비트에 1을 더한다

2의 보수법은 +0과 -0이라는 혼돈에서 우리를 구해주는데다 수 한개를 더 표현할 수 있다는 장점 덕에

오늘날 대부분의 컴퓨터 시스템에서 음수를 표현하는 방법으로 쓰이고 있다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
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
글 보관함