C에서 unsigned Int와 Signed Int의 차이점
다음 기사에서는 C 프로그래밍 언어에서 부호 있는 int
와 부호 없는 int
의 차이점을 살펴봅니다.
C에서 signed
와 unsigned
Int의 차이점
signed int
와 unsigned int
의 구별은 생각만큼 복잡하지 않습니다. signed int
는 종종 int
로 표시되지만 unsigned int
를 다룰 때는 unsigned int
를 써야 합니다.
int
는 데이터 유형이고 unsigned
는 키워드일 뿐이라는 사실은 하드웨어 수준에 연결된 특정 기능을 가지고 있습니다. 이 고유한 목적으로 인해 둘 사이에 더 큰 차이가 발생합니다. 이에 대해서는 다음 부분에서 더 자세히 다룰 것입니다.
int
데이터 유형은signed
이며 최소 범위 요구 사항으로-32767
에서32767
까지의 범위가 있어야 합니다.limits.h
는INT MIN
및INT MAX
에 대한 해당 값으로 실제 값을 나타냅니다.unsigned int
는 헤더 파일의UINT_MAX
상수에 의해 정의된 실제 최대값과 함께0
에서65535
까지 확장되는 최소 범위를 갖습니다. 값이unsigned
인 경우sign
에 대해bits
중 하나를 사용할 필요가 없습니다.
즉, 음수
인코딩을 사용하지 않고 더 다양한 긍정
인코딩을 수신할 수 있습니다.
메모리 요구 사항
먼저 signed int
와 unsigned int
가 컴퓨터 시스템에서 차지하는 메모리 공간을 확인합니다.
-
int
에 대한 메모리 요구 사항은4바이트
이며8
을 곱하면32비트
입니다.4x8 = 32 bits
-
또한
unsigned int
는32비트
까지 합하면4바이트
의 메모리 공간도 차지합니다.int
데이터 유형에서32비트
의 맨 왼쪽비트
는 정수가 양수인지 음수인지를 나타내는부호 비트
로 지정됩니다.1
은 음수 값을 나타내고0
은 양수 값을 나타냅니다.- 현재 int 변수에 저장할 수 있는 정수의 범위는 -(2^31) ~ 2^31-1이며, 이는 -2147483648 ~ 2147483647과 같다.
음수가 컴퓨터에 입력되면 해당 숫자의 2
보수로 이진 형식으로 표시됩니다. 이 때문에 메모리의 시작 bits
는 항상 one
으로 설정되고 컴퓨터는 초기 bit
가 1
로 설정된 것을 볼 때마다 음수를 만났다는 것을 알게 됩니다.
해당 번호에 액세스할 때마다 2
의 보수를 적용하여 원래 형식으로 돌아갑니다. 그러나 unsigned int
데이터 유형에는 sign bit
와 같은 bit
가 없습니다.
따라서 이제 데이터를 저장하는 데 사용할 수 있는 모든 32비트
가 있습니다. unsigned int
에 저장할 수 있는 정수의 범위는 0부터 2^32-1까지이며 이는 0부터 4까지, 294까지, 967까지, 295까지이다.
unsigned int
데이터 유형의 변수는 컴퓨터가 일반적으로 데이터를 이진 형식으로 저장하는 위치입니다.
예를 들어 보겠습니다. 시작하기 위해 변수 x
에 unsigned
유형의 초기 값을 제공합니다.
그런 다음 unsigned int
변수 x
에 음수를 저장하려고 했을 때 컴퓨터는 123
의 2
보수를 사용하여 음수로 표시했습니다. 그런 다음 x
변수의 메모리에 해당 표현을 저장했습니다.
unsigned int x;
x = -123;
따라서 int
데이터 유형의 변수 y
에 음수 -123
을 저장할 때 컴퓨터는 -123
의 2
보수를 사용하여 음의 정수로 표시한 다음 그것을 저장했습니다. y
변수의 메모리.
int y;
y = -123;
‘Unsigned int’ 변수는 표준 이진 형식의 양수 값만 보유합니다. x
변수의 메모리를 통해 메모리에 액세스하려고 할 때 기호 비트
가 예약되지 않았습니다. 그 결과 컴퓨터는 변환할 필요가 없었고 이전에 저장한 ‘2’의 보수가 복구되어 일반 이진수로 표시되었습니다.
printf("%d\n", x);
y
변수의 메모리에 액세스하려고 시도했을 때 컴퓨터는 그것이 int
데이터 유형임을 확인했습니다. 그런 다음 가장 왼쪽 32비트
위치의 왼쪽에 있는 비트
를 확인하고 1
임을 발견했습니다.
그 결과 다시 2
의 보수를 취하고 음수 기호(-
)를 추가하여 결과를 출력했습니다.
printf("%d\n", y);
완전한 소스 코드:
#include <stdio.h>
int main() {
unsigned int x;
x = -123;
int y;
y = -123;
printf("%d\n", x);
printf("%d\n", y);
return 0;
}
출력:
-123
-123
결론
이제 우리는 signed
와 unsigned integers
의 주요 차이점에 익숙합니다. 또한 몇 가지 장점과 단점이 두 가지 형태의 데이터와 관련되어 있다는 사실을 알아야 합니다. 그 균형은 전적으로 사용자의 요구에 달려 있습니다.
예를 들어, 엄청난 수를 저장하려면 unsigned int
를 사용해야 하며 절대 음수 값이 없을 것이라고 확신합니다. 그렇지 않으면 int
데이터 유형을 사용하면 도움이 됩니다.
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn