unsigned short a;
char temp[] = "70000";
a = atoi(temp);
printf("a: %d\n", a);
는 a: 70000
해야 할 때 진수 ASCII 변환하는 더 나은 방법이 있나요 나에게 출력 a: 4464
를 제공? 부호없는 단락의 범위는 0 - 65535입니다.인쇄 부호 없음 short 값
unsigned short a;
char temp[] = "70000";
a = atoi(temp);
printf("a: %d\n", a);
는 a: 70000
해야 할 때 진수 ASCII 변환하는 더 나은 방법이 있나요 나에게 출력 a: 4464
를 제공? 부호없는 단락의 범위는 0 - 65535입니다.인쇄 부호 없음 short 값
귀하가 직접 질문하고 있습니다. unsigned short
의 범위는 0-65535입니다. 따라서 70000은 2 바이트에 들어 가지 않으므로 4 바이트의 데이터 유형을 사용하십시오 (unsigned int
이 작동해야합니다. sizeof
으로 크기를 확인할 수 있습니다).
schnaader said과 같이 오버 플로우 문제가 발생할 수 있습니다.
그러나 부호가없는 값 출력에 대한 printf
질문에 대답하는 경우 u
수정 기호 ("서명되지 않음")가 필요합니다. 옌스 아래 지적이 경우, 당신은 %hu
을 원하는 :
printf("a: %hu\n", a);
을 ... 단지 %u
(unsigned int
, 오히려 unsigned short
보다가) 아마 잘 작동하지만, short
이 int
때를에 승진 때문에 printf
에 대한 스택에 푸시됩니다.
다시 말해서 플랫폼의 unsigned short
에 70000 값이 들어가는 경우에만 해당됩니다.
'a'가'unsigned short'이면'% hu'는 올바른 지정자입니다. –
@Jens : 감사. 'h '지정자는 C 표준에서 정의되어 있습니까? (C++이 아니라 특정 컴파일러가 아닙니다.) 녹록한 기억은'printf'와 같은 varargs 상황에서 스택에 푸시 될 때'short' 값이'int'로 변환된다는 것입니다. 편집 : 예를 들어, 예상 출력 ('42, 60000, 42') 얻을 : http://pastie.org/1613793'gcc -Wall'는 내게 어떤 경고도주지 않았다 (GCC 4.4.3). 물론, 그건 어딘가에서 나를 도우려는 것일 수도 있고, 제 아키텍처 나 컴파일러 등에 한정 될 수도 있습니다 :-) –
예, C99입니다. 그리고 네, 인수는'unsigned short'가 맞으면'int'로, 그렇지 않으면'unsigned int'로 승격됩니다. 그러나 이것은 형식적인 지시자로'printf'가'int'를 해석하는 방법을 알려줍니다. –
글쎄, 내 컴퓨터 과학 숙제를 위해 우리는 unsigned short 데이터 형식을 사용해야한다. – foo
@mateo : 글쎄, 70000을 2 바이트 기간에 맞출 수 없다. 숙제가 당신에게 시도 할 것을 요구하면, 대답은 "나는 너와 교사가 될 수 없다."입니다. 그러나 적절히 말하지 않으므로 다시 읽으십시오. 그러면 우리가 대답하기를 원하면 정확한 문구를 말해주십시오. – delnan
이 경우 70000을 서명되지 않은 두 개의 단락에만 저장할 수 있지만 단 하나에는 저장할 수 없습니다. 참 이상한 소리. – schnaader