龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

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

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
1. 运算结果超出类型大小: #include #include int main(void) { short s1 = SHRT_MAX; short s2 = SHRT_MAX; short num1; int num2; /* 不会是期望的值 */ num1 = s1 + s2; printf("%dn", num1); /* 这样可以了 */ num2 = s1 + s2; pri

  1. 运算结果超出类型大小:

#include 

#include 

int main(void)

{

  short s1 = SHRT_MAX;

  short s2 = SHRT_MAX;

  short num1;

  int num2;

  /* 不会是期望的值 */

  num1 = s1 + s2;

  printf("%dn", num1);

  /* 这样可以了 */

  num2 = s1 + s2;

  printf("%dn", num2);

 

  getchar();

  return 0;

}

  2. 把大的赋给小的:

#include 

#include 

int main(void)

{

  unsigned int  n1 = INT_MAX;

  unsigned char n2;

  unsigned short n3;

  n2 = n1;

  n3 = n1;

  printf("%u, %u, %un", n1, n2, n3);

  printf("%#X, %#X, %#Xnn", n1, n2, n3);

  n1 = LLONG_MAX;

  printf("%lld, %un", LLONG_MAX, n1);

  printf("%#llx, %#xn", LLONG_MAX, n1);

 

  getchar();

  return 0;

}

  3. 把浮点数赋给整数:

#include 

int main(void)

{

  double pi = 3.14159265;

  int i;

  /* 只会留下整数部分 */

  i = pi;

  printf("%dn", i);

  /* 并且不会四舍五入 */

  i = 3.6;

  printf("%dn", i);  

 

  getchar();

  return 0;

}

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

#include 

int main(void)

{

  int n1 = 3;

  int n2 = 2;

  float f;

  /* 这样不行; 但如果你本来就只想要整数部分, 那不正中下怀吗? */

  f = 3 / 2;

  printf("%gn", f);

  /* 这样才可以(如果只有两个运算数, 其中一个是浮点数即可, 但多了不行) */

  f = 3.0 / 2.0;

  printf("%gn", f);

  /* 这样不行 */

  f = n1 / n2;

  printf("%gn", f);

  /* 这样也不行 */

  f = (float)(n1 / n2);

  printf("%gn", f);

  /* 这样才可以 */

  f = (float)(n1) / (float)(n2);

  printf("%gn", f);   

 

  getchar();

  return 0;

}

精彩图集

赞助商链接