学点 C 语言(17): 数据类型 - 因类型引发的问题或错误

180it 2020-03-05 AM 1622℃ 0条
  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;

}

  1. 把大的赋给小的:

    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;

}

  1. 把浮点数赋给整数:

    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;

}

  1. 两个整数相除只返回整数:

    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;

}

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

学点 C 语言(17): 数据类型 - 因类型引发的问题或错误