IT

숫자 뒤에 'u'는 무슨 뜻입니까?

itgroup 2023. 6. 17. 09:00
반응형

숫자 뒤에 'u'는 무슨 뜻입니까?

정확히 무엇을 하는지 말해줄 수 있습니까?u다음과 같은 숫자 뒤에 표시됩니다.

#define NAME_DEFINE 1u 

같은 정수 리터럴1C 코드는 항상 유형입니다.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

반응형