C에서 unsigned Int와 Signed Int의 차이점

Muhammad Zeeshan 2023년10월12일
  1. C에서 signedunsigned Int의 차이점
  2. 메모리 요구 사항
  3. 결론
C에서 unsigned Int와 Signed Int의 차이점

다음 기사에서는 C 프로그래밍 언어에서 부호 있는 int와 부호 없는 int의 차이점을 살펴봅니다.

C에서 signedunsigned Int의 차이점

signed intunsigned int의 구별은 생각만큼 복잡하지 않습니다. signed int는 종종 int로 표시되지만 unsigned int를 다룰 때는 unsigned int를 써야 합니다.

int는 데이터 유형이고 unsigned는 키워드일 뿐이라는 사실은 하드웨어 수준에 연결된 특정 기능을 가지고 있습니다. 이 고유한 목적으로 인해 둘 사이에 더 큰 차이가 발생합니다. 이에 대해서는 다음 부분에서 더 자세히 다룰 것입니다.

  • int 데이터 유형은 signed이며 최소 범위 요구 사항으로 -32767에서 32767까지의 범위가 있어야 합니다. limits.hINT MININT MAX에 대한 해당 값으로 실제 값을 나타냅니다.
  • unsigned int는 헤더 파일의 UINT_MAX 상수에 의해 정의된 실제 최대값과 함께 0에서 65535까지 확장되는 최소 범위를 갖습니다. 값이 unsigned인 경우 sign에 대해 bits 중 하나를 사용할 필요가 없습니다.

즉, 음수 인코딩을 사용하지 않고 더 다양한 긍정 인코딩을 수신할 수 있습니다.

메모리 요구 사항

먼저 signed intunsigned int가 컴퓨터 시스템에서 차지하는 메모리 공간을 확인합니다.

  1. int에 대한 메모리 요구 사항은 4바이트이며 8을 곱하면 32비트입니다.

    4x8 = 32 bits
    
  2. 또한 unsigned int32비트까지 합하면 4바이트의 메모리 공간도 차지합니다.

    • int 데이터 유형에서 32비트의 맨 왼쪽 비트는 정수가 양수인지 음수인지를 나타내는 부호 비트로 지정됩니다. 1은 음수 값을 나타내고 0은 양수 값을 나타냅니다.
    • 현재 int 변수에 저장할 수 있는 정수의 범위는 -(2^31) ~ 2^31-1이며, 이는 -2147483648 ~ 2147483647과 같다.

음수가 컴퓨터에 입력되면 해당 숫자의 2 보수로 이진 형식으로 표시됩니다. 이 때문에 메모리의 시작 bits는 항상 one으로 설정되고 컴퓨터는 초기 bit1로 설정된 것을 볼 때마다 음수를 만났다는 것을 알게 됩니다.

해당 번호에 액세스할 때마다 2의 보수를 적용하여 원래 형식으로 돌아갑니다. 그러나 unsigned int 데이터 유형에는 sign bit와 같은 bit가 없습니다.

따라서 이제 데이터를 저장하는 데 사용할 수 있는 모든 32비트가 있습니다. unsigned int에 저장할 수 있는 정수의 범위는 0부터 2^32-1까지이며 이는 0부터 4까지, 294까지, 967까지, 295까지이다.

unsigned int 데이터 유형의 변수는 컴퓨터가 일반적으로 데이터를 이진 형식으로 저장하는 위치입니다.

예를 들어 보겠습니다. 시작하기 위해 변수 xunsigned 유형의 초기 값을 제공합니다.

그런 다음 unsigned int 변수 x에 음수를 저장하려고 했을 때 컴퓨터는 1232 보수를 사용하여 음수로 표시했습니다. 그런 다음 x 변수의 메모리에 해당 표현을 저장했습니다.

unsigned int x;
x = -123;

따라서 int 데이터 유형의 변수 y에 음수 -123을 저장할 때 컴퓨터는 -1232 보수를 사용하여 음의 정수로 표시한 다음 그것을 저장했습니다. 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

결론

이제 우리는 signedunsigned integers의 주요 차이점에 익숙합니다. 또한 몇 가지 장점과 단점이 두 가지 형태의 데이터와 관련되어 있다는 사실을 알아야 합니다. 그 균형은 전적으로 사용자의 요구에 달려 있습니다.

예를 들어, 엄청난 수를 저장하려면 unsigned int를 사용해야 하며 절대 음수 값이 없을 것이라고 확신합니다. 그렇지 않으면 int 데이터 유형을 사용하면 도움이 됩니다.

Muhammad Zeeshan avatar Muhammad Zeeshan avatar

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

관련 문장 - C Integer