- Today
- Yesterday
- Total
메이쁘
[OS][language] signed 와 unsigned 의 차이 간단 비교 정리! 본문
안녕하세요.
C, C++, Java 등 여러 언어에 숫자형 타입으로 쓰이는 Int 가 있습니다.
여기에선 또 일반적인 Int 와 unsigned Int 로 나눠져 있습니다.
이 두 차이는 무엇일까요?
간단하게 정리해봤습니다.
- signed : 숫자의 양수, 음수 전부 표현 가능한 값 (부호를 가질 수 있어, 양수인지 음수인지 구분 O)
- unsigned : 숫자의 양수만 표현 가능한 값 (부호를 가질 수 없어, 양수인지 음수인지 구분 X)
끝입니다..
그럼 원리를 한 번 보겠습니다.
숫자 값을 메모리에 담아두기 위해 int 변수를 선언합니다.
그럼, 숫자 10을 메모리에 '10' 이라고 기록할 수 있나요?
아뇨. 그렇지 않습니다.
컴퓨터는 0, 1 만 보고 계산한다는 것을 아시나요?
그렇기 때문에, 저 숫자 10을 int 변수에 선언한다면, 이후 컴파일 시 메모리에는 10을 2진수로 변환해서 담습니다.
10을 2진수로 변환하면
10 -> 1010 이 됩니다.
그렇기 때문에, 저희 코드 상에서는 10을 int 변수에 선언했지만 실제 컴파일 할때는 컴퓨터 메모리에 1010 을 담는 것이죠.
말이 조금 길어지는데, int는 32bit(4byte) 까지 표현할 수 있는 타입입니다.
그래서 int로 표현할 수 있는 숫자의 범위는 -(2^31) ~ 2^31 - 1 ( -2,147,483,648 ~ 2,147,483,647 ) 가 되는 것이구요.
근데, 32bit 까지 표현할 수 있다면서 왜 가능한 범위는 2의 31 제곱 까지인가요?
32bit 중 맨 앞에 있는 비트 하나는 부호를 구분하기 위해 쓰이기 때문입니다.
이를 MSB(Most Significant Bit) 라고 하는데, 위 처럼 비트가 나열되어 있을 때 최상단 비트 를 가리킵니다.
*** 반대는 LSB(Least Significant Bit) 라고 합니다.
최상단 비트를 주로 부호 구분에 사용하기 때문에 MSB 라고 하기도 한다는 거죠.
다시 되돌아와서, 10을 int 변수에 선언했으면 메모리에는
-> 0000 / 0000 / 0000 / 0000 / 0000 / 0000 / 0000 / 1010
로 저장됩니다.
반대로 -10 을 선언했다면 어떻게 저장될까요?
-> 1000 / 0000 / 0000 / 0000 / 0000 / 0000 / 0000 / 1010
즉, MSB가 0이면 양수를, 1이면 음수를 나타냅니다.
이것이 signed bit 입니다.
그럼 unsigned bit 는 MSB로 부호 구분을 하지 않기 때문에
온전히 32bit를 가지고 숫자를 표현할 수 있습니다.
그래서 signed 와는 다르게 0 ~ 2^32 - 1 (양수는 대략 2배의 범위) 를 표현할 수 있습니다.
원리를 읽으시면서 이해하면 어느순간 머릿속에 깊숙히 담기실 겁니다.
감사합니다!
'면접 대비 CS지식 > else' 카테고리의 다른 글
[Tool] SVN과 Git에 대해 간단 정리 및 비교 (0) | 2021.01.08 |
---|---|
[SW CS] 객체 지향 프로그래밍(OOP : Object-Oriented Programming) 은 무엇일까? (feat.절차적 프로그래밍) (0) | 2020.09.06 |
[OS] MultiProgramming, MultiProcessing, MultiThreading, MultiTasking 간단 정의 및 차이점! (0) | 2020.07.09 |
[컴퓨터구조] CPU와 RAM, 그리고 ROM(HDD, SDD 등) 에 대한 깔끔 심플 정리!! (2) | 2020.07.08 |
[Hash][Encryption] Hash(해시) 와 Encryption(암호화) 알고리즘의 가장 큰 차이점은? (0) | 2020.07.01 |