BackEnd/C# / / 2020. 2. 28. 22:05

[c# 언어] 정수/소수 데이터 타입 정리 (2진수/16진수 표현)

반응형

C#에서 사용하는 정수형 데이터타입과 10진수 이외의 2진수,16진수 사용법, byte와 sbyte의 차이점을 정리한다.

 

C# 정수형 데이터 타입

데이터 타입 설명 크기(바이트) 범위
byte 부호없는정수 1(8비트) 0~255
sbyte signed byte 정수 1(8비트) -128~127
short 정수 2(16비트) -32,768~32,767
ushort unsigned short 부호없는정수 2(16비트) 0~65,535
int 정수 4(32비트) -2,147,483,648~2,147,483,647
uint unsigned short 부호없는정수 4(32비트) 0~4,294,967,295
long 정수 8(64비트) -922,337,203,685,477,508~922,337,203,685,477,507
ulong unsigned short 부호없는정수 8(64비트) 0~18,446,744,073,709,551,615
char 유니코드 문자 2(16비트) -

 

2진수, 16진수 표현법

2진수는 (숫자 0과 알파벳b - 0b) 접두사를 사용하면 된다.

16진수는 (숫자 0과 알파벳x -0x) 접두사를 사용하면 된다.

 

소수 데이터 타입

데이터 형식 설명 크기(바이트) 범위
float 단일 정밀도 부동 소수점 형식
(7개의 자릿수만 다룰 수 있음)
4(32비트) -3.402823e38~3.402823e38
double 복수 정밀도 부동 소수점 형식
(15~16개의 자릿수를 다룰 수 있음)
8(64비트) -1.79769313486232e308~1.79769313486232e308

> float형은 유효숫자가 7자리밖에 되질 않기때문에 대략적으로 표현할때 사용

> 소수점 표현은 float형과 double형 두가지 있지만 double형을 권장한다. double이 float에 비해 메모리를 두 배 사용하지만 그만큼 데이터 손실이 적다.

> double형도 데이터 손실이 우려된다면 decimal형을 사용한다.

 

데이터 형식 설명 크기(바이트) 범위
decimal 29자리 데이터를 표현할 수 잇는 소수 형식 16(128비트) ±1.0X10e-28 ~ ±7.9X10e28

 

아래 ConsoleApp1 예제는 여러가지 정수형 데이터타입 예제와 2진수, 16진수 예제이다.

추가로 unsigned byte에 대한 예제로

11111111을 표현할때, 데이터 타입으로 인해 byte는 255이지만, sbyte는 255가 아니라 -1이 출력되는 것을 볼 수 있다.

(2의 보수법으로 음수를 표현하기때문에 -1이 출력)

 

2의 보수법으로 음수 표현법

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

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

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

ex)

1. 00000001 <- 10진수 1

2. 11111110 <- 반전

3. 11111111 <- 1을 더한다. 즉 -1을 표현함.

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            sbyte a = -10;
            byte b = 40;
 
            Console.WriteLine($"a={a}, b={b}");
 
            short c = -30000;
            ushort d = 60000;
 
            Console.WriteLine($"c={c}, d={d}");
 
            int e = -1000_0000;
            uint f = 3_0000_0000;
            //큰 자릿수의 정수 리터럴을 타이핑할때 자릿수 구분자(_)를 이용하면 편리하다.
 
            Console.WriteLine($"e={e}, f={f}");
 
            long g = -5000_0000_0000;
            ulong h = 200_0000_0000_0000_0000;
 
            Console.WriteLine($"g={g}, h={h}");
 
            //10진수 리터럴
            byte a10 = 240;
            Console.WriteLine($"a10={a10}");
            //2진수 리터럴
            byte a2 = 0b1111_0000;
            Console.WriteLine($"a2={a2}");
            //16진수 리터럴
            byte a16 = 0XF0;
            Console.WriteLine($"a16={a16}");
            //16진수 리터럴
            uint b16 = 0x1234_abcd;
            Console.WriteLine($"b16={b16}");
 
            //byte 형식 255는 11111111
            //sbyte 형식 -1은 11111111
            byte i = 255
            sbyte j = (sbyte)i; //(sbyte)는 변수를 sbyte 형식으로 변환하는 연산자
            Console.WriteLine($"i={i}");
            Console.WriteLine($"j={j}");
 
 
 
        }
    }
}
 

ConsoleApp1 소스코드

ConsoleApp1 수행 결과

 

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유