programing

서명된 int와 서명되지 않은 int의 차이점은 무엇입니까?

itsource 2022. 7. 5. 23:25
반응형

서명된 int와 서명되지 않은 int의 차이점은 무엇입니까?

서명된 int와 서명되지 않은 int의 차이점은 무엇입니까?

아시겠지만int을 사용하다은 「」입니다.int에는 32비트가 포함되어 있습니다만, 환경에 따라서는 16비트 또는 64비트(또는 다른 수, 통상은 2의 거듭제곱은 아닙니다)를 포함할 수 있습니다.

이 예에서는 4비트 정수를 살펴보겠습니다.작지만 일러스트 용도로 유용합니다.

이러한 정수에는 4비트가 있기 때문에 16은 2의 4제곱 또는 2의 2×2×2의 16의 값 중 하나를 가정할 수 있습니다.그가가 은엇? ??? 엇??은 이 가 signed int ★★★unsigned int를 . . . . . . . . . . 。unsigned int값은 음수가 되지 않습니다.이치노 4비트 .unsigned int:

bits  value
0000    0
0001    1
0010    2
0011    3
0100    4
0101    5
0110    6
0111    7
1000    8
1001    9
1010   10
1011   11
1100   12
1101   13
1110   14
1111   15

4의 을 다음에 signed int:

bits  value
0000    0
0001    1
0010    2
0011    3
0100    4
0101    5
0110    6
0111    7
1000   -8
1001   -7
1010   -6
1011   -5
1100   -4
1101   -3
1110   -2
1111   -1

바와 같이, as as as as as as as 。signed int 가장 는 s " " " 입니다.1츠키노그렇기 때문에signed int이 bit라고 불립니다.s, "sign bit"는 "sign bit"입니다.

평신도의 용어로 부호 없는 int는 음수가 될 수 없는 정수이므로 가정할 수 있는 양의 값의 범위가 더 높다.부호 있는 int는 음수가 될 수 있지만 음수가 될 수 있는 값이 많을수록 낮은 양의 범위를 갖는 정수입니다.

int ★★★★★★★★★★★★★★★★★」unsigned int2번입니다intsigned int 그냥 " " " " "signedunsigned intunsigned

알 수 있듯이, 「」는 「」입니다.int는 부호 있는 정수형입니다.unsigned int는 부호 없는 정수형입니다.즉,int값을 수 , 음의 값을 나타낼 수 있습니다.unsigned int는 음수가 아닌 값만 나타낼 수 있습니다.

C 언어는 이러한 유형의 범위에 몇 가지 요구사항을 부과합니다." " 의.int적어도 이하여야 한다-32767+32767 의 " " " "unsigned int적어도 이하여야 한다065535이는 두 유형 모두 최소 16비트여야 함을 의미합니다.많은 시스템에서는 32비트, 일부 시스템에서는 64비트입니다. int는 일반적으로 대부분의 최신 시스템에서 사용되는 두 가지 표현으로 인해 음수 값이 추가로 지정됩니다.

아마도 가장 중요한 차이는 부호 있는 산수와 부호 없는 산수의 행동일 것이다.된 명의 int, overflow에 정의되지 않은 동작이 있습니다.위해서unsigned int, 오버플로는 없습니다.유형의 범위를 벗어난 값을 산출하는 조작은, 예를 들면 다음과 같습니다.UINT_MAX + 1U == 0U.

부호 포함 또는 부호 없음 정수 유형은 수학 정수 집합의 무한 하위 범위를 모델링합니다.타입의 범위내의 값으로 작업하는 한, 모든 것이 유효합니다.유형의 하한 또는 상한에 근접하면 불연속성이 발생하여 예기치 않은 결과를 얻을 수 있습니다.부호 있는 정수 타입의 경우, 이 문제는 음수 및 양의 값이 매우 큰 경우에만 발생합니다.INT_MIN ★★★★★★★★★★★★★★★★★」INT_MAX부호 없는 정수 타입의 경우 매우 큰 양의 값과 0에서 문제가 발생합니다.이것은 버그의 원인이 될 수 있습니다.예를 들어, 이것은 무한 루프입니다.

for (unsigned int i = 10; i >= 0; i --) [
    printf("%u\n", i);
}

i항상 0보다 크거나 같기 때문에 부호 없는 타입의 성질입니다.(루프 내부에서는,ii--은 「이렇게 하다」로 합니다.UINT_MAX

특정 정수 변수에 저장된 값이 항상 양의 값인 것을 미리 알고 있는 경우가 있습니다. 예를 들어 정수 변수가 계산에만 사용되는 경우입니다.부호가 할 수 unsigned int num student;이러한 선언을 사용하면 (32비트 컴파일러의 경우) 허용되는 정수 값의 범위는 -2147483648 ~+2147483647 범위에서0 ~ 4294967295 의 범위로 바뀝니다.따라서 정수를 부호 없음으로 선언하면 가능한 최대 값의 크기가 두 배로 증가합니다.

실제로는 다음 두 가지 차이가 있습니다.

  1. 인쇄(예:cout C++로printfC): 부호 없는 정수 비트 표현은 인쇄 함수에 의해 음이 아닌 정수로 해석됩니다.
  2. 주문: 주문은 서명된 사양 또는 서명되지 않은 사양에 따라 달라집니다.

이 코드는 순서 기준을 사용하여 정수를 식별할 수 있습니다.

char a = 0;
a--;
if (0 < a)
    printf("unsigned");
else
    printf("signed");

char라고 생각되다signed 및 부 in in in 。unsigned하다위의 코드는 순서 기준을 사용하여 컴파일러에서 고려되는 코드를 결정합니다. ifa「」 「」가 되어 있지 .a--더 클 거예요.보다 클 것입니다.0 ,, 약, 약, 약, 면, 면signed보다 것입니다. 두 경우 표현은 "", ""입니다.a, 경우든, 어느 경우든a--는 비트 표현에도 같은 변경을 가합니다.

언급URL : https://stackoverflow.com/questions/5739888/what-is-the-difference-between-signed-and-unsigned-int

반응형