서명된 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 int
2번입니다int
signed int
그냥 " " " " "signed
unsigned int
unsigned
알 수 있듯이, 「」는 「」입니다.int
는 부호 있는 정수형입니다.unsigned int
는 부호 없는 정수형입니다.즉,int
값을 수 , 음의 값을 나타낼 수 있습니다.unsigned int
는 음수가 아닌 값만 나타낼 수 있습니다.
C 언어는 이러한 유형의 범위에 몇 가지 요구사항을 부과합니다." " 의.int
적어도 이하여야 한다-32767
+32767
의 " " " "unsigned int
적어도 이하여야 한다0
65535
이는 두 유형 모두 최소 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보다 크거나 같기 때문에 부호 없는 타입의 성질입니다.(루프 내부에서는,i
i--
은 「이렇게 하다」로 합니다.UINT_MAX
특정 정수 변수에 저장된 값이 항상 양의 값인 것을 미리 알고 있는 경우가 있습니다. 예를 들어 정수 변수가 계산에만 사용되는 경우입니다.부호가 할 수 unsigned int num student;
이러한 선언을 사용하면 (32비트 컴파일러의 경우) 허용되는 정수 값의 범위는 -2147483648 ~+2147483647 범위에서0 ~ 4294967295 의 범위로 바뀝니다.따라서 정수를 부호 없음으로 선언하면 가능한 최대 값의 크기가 두 배로 증가합니다.
실제로는 다음 두 가지 차이가 있습니다.
- 인쇄(예:
cout
C++로printf
C): 부호 없는 정수 비트 표현은 인쇄 함수에 의해 음이 아닌 정수로 해석됩니다. - 주문: 주문은 서명된 사양 또는 서명되지 않은 사양에 따라 달라집니다.
이 코드는 순서 기준을 사용하여 정수를 식별할 수 있습니다.
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
'programing' 카테고리의 다른 글
동적 할당 없이 실행 시 어레이 크기가 허용됩니까? (0) | 2022.07.05 |
---|---|
vue getter를 사용하여 개체 내부의 값을 찾는 방법은 무엇입니까? (0) | 2022.07.05 |
초기 값을 HTML에서 직접 사용할 수 있는 vue.js 모델로 설정합니다. (0) | 2022.07.05 |
Java에서 sha256으로 문자열을 해시하려면 어떻게 해야 합니까? (0) | 2022.07.05 |
어떻게 공짜가 얼마를 공짜로 주는지 알 수 있죠? (0) | 2022.07.05 |