숫자 뒤에 'u'는 무슨 뜻입니까?
정확히 무엇을 하는지 말해줄 수 있습니까?u
다음과 같은 숫자 뒤에 표시됩니다.
#define NAME_DEFINE 1u
같은 정수 리터럴1
C 코드는 항상 유형입니다.int
.int
와 같은 것입니다.signed int
하나가 추가됨u
또는U
(독립적으로) 리터럴에 대해 서명되지 않은 int임을 확인하고 다양한 예기치 않은 버그 및 이상한 동작을 방지합니다.
이러한 버그의 한 예:
int가 16비트인 16비트 시스템에서 다음 식을 사용하면 음수 값이 됩니다.
long x = 30000 + 30000;
30000 리터럴은 둘 다 int이며 피연산자 둘 다 int이므로 결과는 int가 됩니다.16비트 서명된 int는 최대 32767까지의 값만 포함할 수 있으므로 오버플로가 발생합니다. x
이로 인해 예상대로 6만이 아닌 이상한 음의 값을 얻을 것입니다.
코드
long x = 30000u + 30000u;
그러나 예상대로 동작합니다.
부호 없는 리터럴 정수 상수를 정의하는 방법입니다.
이것은 컴파일러에게 상수 1이 부호 없는 정수로 사용되어야 한다는 것을 알려주는 방법입니다.일부 컴파일러는 'u'와 같은 접미사가 없는 숫자는 int 유형이라고 가정합니다.이러한 혼동을 방지하려면 상수를 부호 없는 정수로 사용할 때 'u'와 같은 접미사를 사용하는 것이 좋습니다.다른 유사한 접미사도 존재합니다.예를 들어 float의 경우 f가 사용됩니다.
이것은 "unsigned int"를 의미하며, 기본적으로 컴파일 시 숫자 상수가 적절한 유형으로 변환되도록 하는 캐스트와 같은 기능을 합니다.
코드의 10진수 리터럴(8진수 리터럴과 16진수 리터럴은 다릅니다. https://en.cppreference.com/w/c/language/integer_constant) 에는 다음 유형 중 하나가 있습니다.int
,long
또는long long
이들 중에서 컴파일러는 값을 저장할 수 있을 만큼 충분히 큰 최소 유형을 선택해야 합니다.유형에 유의하십시오.char
,signed char
그리고.short
고려되지 않습니다.예:
0 // this is a zero of type int
32767 // type int
32768 // could be int or long: On systems with 16 bit integers
// the type will be long, because the value does not fit in an int there.
추가할 경우u
그 수에 대한 접미사.U
또한 할 것이다), 컴파일러는 대신 가장 작은 유형을 선택해야 합니다.unsigned int
,unsigned long
그리고.unsigned long long
예:
0u // a zero of type unsigned int
32768u // type unsigned int: always fits into an unsigned int
100000u // unsigned int or unsigned long
마지막 예를 사용하여 캐스트에게 차이를 보여줄 수 있습니다.
100000u // always 100000, but may be unsigned int or unsigned long
(unsigned int)100000 // always unsigned int, but not always 100000
// (e.g. if int has only 16 bit)
참고 사항:다음을 추가하는 상황이 있습니다.u
룬딘의 답이 보여주듯이, 접미사는 계산의 정확성을 보장하는 올바른 것입니다.그러나, 다음과 같은 문구가 있는 경우에도 서명된 형식과 서명되지 않은 형식의 혼합을 엄격하게 금지하는 코딩 지침도 있습니다.
unsigned int x = 0;
부적합으로 분류되어 다음과 같이 작성되어야 합니다.
unsigned int x = 0u;
없는 를▁of▁thisers▁that▁the▁▁habit▁adding다있▁values▁where니▁lead습▁a▁situationigned▁develop수▁uns▁can▁deal를 추가하는 습관이 생길 수 있습니다.u
도처에 있는 리터럴의 접미사.그러나 서명을 변경하면 다음과 같은 다양한 상황에서 다른 동작이 발생할 수 있습니다.
(x > 0)
can (x의 종류에 따라) 과는 다른 것을 의미합니다.
(x > 0u)
다행히도 컴파일러/코드 검사기는 일반적으로 의심스러운 경우에 대해 경고합니다.그럼에도 불구하고, a를 추가합니다.u
접미사는 고려하여 수행되어야 합니다.
언급URL : https://stackoverflow.com/questions/9029974/what-does-u-mean-after-a-number
'IT' 카테고리의 다른 글
DTO의 기본값을 설정할 수 있습니까? (0) | 2023.06.17 |
---|---|
충돌 분석 - 빌드/버전을 삭제하려면 어떻게 해야 합니까? (0) | 2023.06.17 |
C: strtok_r의 올바른 사용법 (0) | 2023.06.17 |
MSAL(Microsoft Authentication Library for js)을 텍스트 대응 단일 페이지 응용 프로그램으로 올바르게 가져오고 사용하는 방법은 무엇입니까? (0) | 2023.06.17 |
유형 스크립트에서 중첩된 선택 <> 유형을 수행할 방법이 있습니까? (0) | 2023.06.17 |