博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学点 C 语言(17): 数据类型 - 因类型引发的问题或错误
阅读量:6638 次
发布时间:2019-06-25

本文共 1441 字,大约阅读时间需要 4 分钟。

  hot3.png

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

#include 
#include
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 
#include
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 
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;}
4. 两个整数相除只返回整数:

#include 
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;}

转载于:https://my.oschina.net/hermer/blog/319410

你可能感兴趣的文章
unity编辑器扩展
查看>>
Json解析
查看>>
生命周期
查看>>
序列化
查看>>
扩展方法
查看>>
02定时回调增加任务循环功能
查看>>
03Lua中的数据类型
查看>>
11迭代器和表
查看>>
14:协同(coroutine)
查看>>
05:C#访问Lua中的全局function
查看>>
04:canvas的三种渲染模式
查看>>
【老鸟分享】Linux命令行终端提示符多种实用技巧!
查看>>
你理解这些Cisco NAT分类和原理吗
查看>>
门户网站CDN实战优化教学案例分享
查看>>
倾听是谈话中最基本的技巧
查看>>
debian下安装wps office
查看>>
【原】unity3D 调用android .so
查看>>
最近生活
查看>>
27、SQL Server 数据架构创建之数据列的创建
查看>>
Android Studio中如何查看Logcat调试信息
查看>>