学点C语言(17):数据范例 – 因范例激发的问题或错误
副标题#e#
1. 运算功效超出范例巨细:
#include <stdio.h>
#include <limits.h>
int main(void)
{
short s1 = SHRT_MAX;
short s2 = SHRT_MAX;
short num1;
int num2;
/* 不会是期望的值 */
num1 = s1 + s2;
printf("%d\n",num1);
/* 这样可以了 */
num2 = s1 + s2;
printf("%d\n",num2);
getchar();
return 0;
}
2. 把大的赋给小的:
#include <stdio.h>
#include <limits.h>
int main(void)
{
unsigned int n1=INT_MAX;
unsigned char n2;
unsigned short n3;
n2 = n1;
n3 = n1;
printf("%u,%u,%u\n",n1,n2,n3);
printf("%#X,%#X,%#X\n\n",n1,n2,n3);
n1 = LLONG_MAX;
printf("%lld,%u\n",LLONG_MAX,n1);
printf("%#llx,%#x\n",LLONG_MAX,n1);
getchar();
return 0;
}
3. 把浮点数赋给整数:
#include <stdio.h>
int main(void)
{
double pi = 3.14159265;
int i;
/* 只会留下整数部门 */
i = pi;
printf("%d\n",i);
/* 而且不会四舍五入 */
i = 3.6;
printf("%d\n",i);
getchar();
return 0;
}
#p#副标题#e#
4. 两个整数相除只返回整数:
#include <stdio.h>
int main(void)
{
int n1 = 3;
int n2 = 2;
float f;
/* 这样不可; 但假如你原来就只想要整数部门,那不正中下怀吗? */
f = 3 / 2;
printf("%g\n",f);
/* 这样才可以(假如只有两个运算数,个中一个是浮点数即可,但多了不可) */
f = 3.0 / 2.0;
printf("%g\n",f);
/* 这样不可 */
f = n1 / n2;
printf("%g\n",f);
/* 这样也不可 */
f = (float)(n1 / n2);
printf("%g\n",f);
/* 这样才可以 */
f = (float)(n1) / (float)(n2);
printf("%g\n",f);
getchar();
return 0;
}
返回“学点C语言 – 目次”