C의 부호 없는 값
다음 코드가 있습니다.
#include <stdio.h>
int main() {
unsigned int a = -1;
int b = -1;
printf("%x\n", a);
printf("%x\n", b);
printf("%d\n", a);
printf("%d\n", b);
printf("%u\n", a);
printf("%u\n", b);
return 0;
}
출력은 다음과 같습니다.
ffffffff
ffffffff
-1
-1
4294967295
4294967295
다음으로 전달된 값에 따라 값이 서명된 것으로 해석되거나 서명되지 않은 것으로 해석되는 것을 볼 수 있습니다.printf
기능.두 경우 모두 바이트 수는 동일합니다(ffffffff
). 그렇다면 무엇입니까?unsigned
단어는?
할당합니다.int -1
완전히unsigned
: 아-1
범위에 맞지 않음[0...UINT_MAX]
, 몇 배의UINT_MAX+1
답변이 범위에 도달할 때까지 추가됩니다.분명히UINT_MAX
가pow(2,32)-1 or 429496725
OP의 기계에서도 4294967295의 값이 있습니다.
unsigned int a = -1;
그"%x"
,"%u"
지정자가 일치할 것으로 예상합니다.unsigned
. 이 값이 일치하지 않으므로 "변환 규격이 올바르지 않으면 동작이 정의되지 않습니다.인수가 해당 변환 규격에 대한 올바른 유형이 아니면 동작이 정의되지 않습니다." C11 §7.21.6.19.인쇄 지정자가 변경되지 않습니다.b
.
printf("%x\n", b); // UB
printf("%u\n", b); // UB
그"%d"
지정자가 일치할 것으로 예상합니다.int
. 이것들이 일치하지 않기 때문에, 더 많은 UB.
printf("%d\n", a); // UB
정의되지 않은 동작을 고려할 때 결론은 지원되지 않습니다.
두 경우 모두 바이트가 동일합니다(fffffffff).
같은 비트 패턴이라도 종류에 따라 값이 다를 수 있습니다.ffffffff
…로서unsigned
는 4294967295의 값을 가집니다.아산으로서int
, 부호화된 정수 부호화에 따라 -1, -2147483647 또는 TBD 값을 갖습니다.로서float
NAN일 수도 있습니다.
부호 없는 단어는 무엇을 뜻합니까?
unsigned
정수를 범위에 저장합니다.[0 ... UINT_MAX]
. 그것은 결코 부정적인 값을 가지지 않습니다.코드에 음수가 아닌 숫자가 필요한 경우 사용unsigned
. 코드에 +, - 또는 0일 수 있는 카운팅 번호가 필요한 경우 다음을 사용합니다.int
.
업데이트: 컴파일러가 서명된 서명을 할당하는 것에 대한 경고를 방지합니다.int
로.unsigned
, 아래의 내용을 사용합니다.이거는.unsigned
1u
부정되는 것 - 위와 같이 잘 정의되어 있습니다.효과는 a와 같습니다.-1
, 컴파일러에게 직접적인 의도를 전달합니다.
unsigned int a = -1u;
하고 있다unsigned
변수 선언은 프로그래머 자신에게 더 유용합니다. 변수를 부정적으로 취급하지 마십시오.당신이 알아차렸다시피, 둘 다-1
그리고.4294967295
4바이트 정수에 대해 정확히 동일한 비트 표현을 갖습니다.그들을 어떻게 대하거나 보고 싶은지가 중요합니다.
성명서unsigned int a = -1;
변환 중입니다.-1
둘의 보어와 비트 표현을 할당합니다.a
.그printf()
명세자x
,d
그리고.u
비트 표현이 변수에 저장되는 방식을 보여주고 있습니다.a
형식이 다른 것 같습니다.
초기화 시unsigned int a to -1;
그것은 당신이 의 보어를 기억 속에 저장하고 있다는 것을 의미합니다.a
.
그것은 단지.0xffffffff
아니면4294967295
.
따라서 를 사용하여 인쇄할 때%x or %u
포맷 지정자는 그 출력을 얻을 수 있습니다.
변수의 부호를 지정하여 저장 가능한 값의 최소 및 최대 한도를 결정합니다.
처럼.unsigned int
: 범위는 ~입니다.0 to 4,294,967,295
그리고.int
: 범위는 ~입니다.-2,147,483,648 to 2,147,483,647
서명 여부에 대한 자세한 내용은 다음을 참조하십시오.
언급URL : https://stackoverflow.com/questions/32344810/unsigned-values-in-c
'programing' 카테고리의 다른 글
워드프레스가 있는 웹팩 개발 서버 (0) | 2023.10.17 |
---|---|
window.location일 때 이벤트.href 변경사항 (0) | 2023.10.17 |
Apache Spark DataFrame에서 열 연결 (0) | 2023.10.17 |
C의 잠정적인 정의의 근거는 무엇입니까? (0) | 2023.10.17 |
C에서 2d 배열을 자유롭게 하는 방법? (0) | 2023.10.17 |