C 언어 데이터 유형 및 형식 출력 요약 2
1 sizeof('a')
printf("%d",sizeof('a'));
위의 이 문장은 4 를 출력한다.왜냐하면sizeof에서 값을 얻었을 때 기본적으로'a'를 ASCII에 해당하는 값으로 97로 간주하여sizeof(97)=4와 같다
2 부동점수와 0의 값의 크기를 비교한다
double tmp = 0.3;
printf("%d",(int)(tmp*10));
먼저 위의 코드를 살펴보자. 이 코드는 내 컴퓨터에서 출력 결과가 2(컴파일러에 따라 출력 결과가 다를 수 있음)이다.그 이유는 0.3이 더블로 저장되었을 때 그 데이터는 0.2999999999999...
printf("%.17f",tmp);
출력은 다음과 같습니다.
0.29999999999999999
따라서 tmp*3은 2.9999999와 같다.%d 10진수로 출력하면 2가 출력됩니다.마찬가지로 tmp의 값이 0.7이면 출력 결과도 6이 될 수 있다.
위의 코드에서 우리는 부동점수가 정밀도 제한이 있다는 것을 알고 있으며, 출력의 값은 우리가 예상한 것과 반드시 완전히 같지는 않으며, 항상 오차가 존재할 수 있다.예를 들어 아래의 코드는 not equal로 출력됩니다.
#include
int main(int argc, char *argv[])
{
float data = 0.3;
if(data == 0.3)// ?
{
printf("equal
");
}
else
{
printf("not equal
");// not equal
}
return 0;
}
따라서 부동점수와 0의 크기를 비교하려면 우리는 ==로 판단하지 않고 >= 또는 <=로 전환하려고 한다.부동 소수점 변수의 이름이 x라고 가정하면
if( x == 0)//
전환
if((x >= -EPSINON) && (x <= EPSINON))
여기서 EPSINON은 허용되는 오차입니다(예: 정밀도).
#include
int main()
{
// double tmp = 0.3; //0.3 0.7
// printf("%d
", (int)((tmp+0.00000001) *10));
float a = 0.1;
if(a*10 >= 1.0 - 0.0000001 && a*10 <= 1.0+0.000001)
{
printf("====");
}
else
{
printf("xxxx");
}
return 0;
}
3 printf는 도메인 폭을 반환합니다.
4 a=b=c=d=e=5 할당 과정
= 연산자의 결합형은 오른쪽에서 왼쪽으로, 그 반환은 값을 부여한 값이기 때문에 표현식은
a = (b = (c = (d = (e = 5))));
5를 e에 부여하고, e를 e에 부여...a에게 b를 부여할 때까지
5a*=b+4 어떻게 이해
우선, +의 우선순위가 *=보다 높기 때문에 표현식은
a = a\*(b+4);
6 a++b 어떻게 이해
그 결과는 (a++)+b이다.이것은 편역 원리의 입이 큰 법칙과 관련된다.연구를 기다리다.
7 우선 순위 문제
xx = 1+1, 2+1, 3+1;// 2
xx = (1+1, 2+1, 3+1);// 4
먼저, 우리는 연산자의 우선순위가 가장 낮다는 것을 알고 그 결합형은 왼쪽에서 오른쪽으로 첫 번째 문장에서 xx=1+1을 먼저 집행한다.xx에 직접 2를 부여한 다음에 2+1, 3+1 등 결과와 무관한 문장을 집행한다.두 번째 문장은 괄호가 존재하기 때문에 먼저 괄호의 내용을 집행하고 쉼표의 결합성은 왼쪽에서 오른쪽이기 때문에 마지막 문장인 3+1을 되돌려준다.이어서 3+1의 값을 xx에게 부여한다.그러므로 수출은 4이다.
8 출력이 자리 표시자와 일치하지 않을 때
변환을 할 수 없기 때문에 출력이 혼란스러울 수 있습니다
float fData = 3.33;
printf("%d
",fData);// 0
printf("%d
",f);// 0
printf("f + i = %d
",(f+i));//
printf("f + i = %d
",(int)(f+i));// 8
printf("f + i = %f
",f+i);//8.400000
10 sizeof(float+long long)
#include
int main(int argc, char *argv[])
{
float f;
long long LL;
printf("sizeof(f) = %d
", sizeof(f));
printf("sizeof(LL) = %d
", sizeof(LL));
printf("sizeof(f+LL = )%d
",sizeof(f+LL));
return 0;
}
위 코드 출력은
sizeof(f) = 4
sizeof(LL) = 8
sizeof(f+LL = )4
플로트가 표시하는 최대치가 롱롱이 표시하는 최대치보다 크기 때문에 롱롱은 플로트로 강제로 전환되기 때문에sizeof(float)=4와 같다.
11++와--부동점형에도 사용 가능
float a = 1.78;
a++;
printf("%f",a);// 2.780000
12 sizeof는 연산자입니다. 함수가 아닙니다. 우선 순위에 주의하십시오.
char a = 1;int b = 10;
printf("sizeof a+b =%d
",sizeof a+b);// 11, sizeof ,
13
#include
int main()
{
int c = 10;
int d = 20;
printf(" value = %d
", (1 ? c : ((++d)<10 ? 100 : 200)));
printf(" d = %d
", d);
return 0;
}
출력 결과
value = 10
d = 20
출력 d는 20이며, 자체 증가가 진행되지 않았습니다.그런데 세 개의 연산자는 오른쪽에서 왼쪽으로 실행되는 거 아니에요?++d를 먼저 실행해야 하지 않습니까?해결을 기다리다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.