社区
C语言
帖子详情
关于C语言自动转换的问题
pang123hui
2009-10-13 11:54:57
今天在看一本C语言书时,看到这么一句话,是关于数值类型自动转换的,
即当遇到short ,char时,系统一律将其转换为int 参与运算
当遇到float时,系统一律将其转换为 double参与运算
那么,如果是这样的话,short,char和float 还有什么存在的意义呢?
我们程序员在写程序的时候,直接定义为int 和double不就可以了吗?
感谢回答
...全文
112
7
打赏
收藏
关于C语言自动转换的问题
今天在看一本C语言书时,看到这么一句话,是关于数值类型自动转换的, 即当遇到short ,char时,系统一律将其转换为int 参与运算 当遇到float时,系统一律将其转换为 double参与运算 那么,如果是这样的话,short,char和float 还有什么存在的意义呢? 我们程序员在写程序的时候,直接定义为int 和double不就可以了吗? 感谢回答
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pang123hui
2009-10-14
打赏
举报
回复
[Quote=引用 4 楼 supermegaboy 的回复:]
引用 3 楼 pang123hui 的回复:
引用 2 楼 supermegaboy 的回复:
那么,如果是这样的话,short,char和float 还有什么存在的意义呢?
我们程序员在写程序的时候,直接定义为int 和double不就可以了吗?
----------------------------------------------------------
类型的多样性是为了满足不同用户的需求。我只需要一个char的空间,为什么要用一个int的空间去定义?显然是浪费。
但类型提升不是因为用户需求,而是效率需求。short、char、float这些东西是语言对内存操作的不同抽象,是语言的高级特性,但对一个程序的执行效率而言却是有害的,只操作一种类型显然比操作多种类型更方便。类型提升就是提高程序运行效率的措施。
这样的话,可不可以理解为系统是牺牲空间来换取时间呢?
看来这应该是因为计算机存储空间的不断增加而在C99标准中新加入的吧(仅仅是我的猜测,未求证)
进行类型提升时,并没有改变原来对象的空间,而是产生一个可以随时抛弃的临时对象。没有空间换时间的问题。
[/Quote]
哦,我明白了,也就是说仅仅改变一下类型名称,使其统一,方便系统操作,提高效率是吧
飞天御剑流
2009-10-14
打赏
举报
回复
[Quote=引用 3 楼 pang123hui 的回复:]
引用 2 楼 supermegaboy 的回复:
那么,如果是这样的话,short,char和float 还有什么存在的意义呢?
我们程序员在写程序的时候,直接定义为int 和double不就可以了吗?
----------------------------------------------------------
类型的多样性是为了满足不同用户的需求。我只需要一个char的空间,为什么要用一个int的空间去定义?显然是浪费。
但类型提升不是因为用户需求,而是效率需求。short、char、float这些东西是语言对内存操作的不同抽象,是语言的高级特性,但对一个程序的执行效率而言却是有害的,只操作一种类型显然比操作多种类型更方便。类型提升就是提高程序运行效率的措施。
这样的话,可不可以理解为系统是牺牲空间来换取时间呢?
看来这应该是因为计算机存储空间的不断增加而在C99标准中新加入的吧(仅仅是我的猜测,未求证)
[/Quote]
进行类型提升时,并没有改变原来对象的空间,而是产生一个可以随时抛弃的临时对象。没有空间换时间的问题。
pang123hui
2009-10-14
打赏
举报
回复
[Quote=引用 2 楼 supermegaboy 的回复:]
那么,如果是这样的话,short,char和float 还有什么存在的意义呢?
我们程序员在写程序的时候,直接定义为int 和double不就可以了吗?
----------------------------------------------------------
类型的多样性是为了满足不同用户的需求。我只需要一个char的空间,为什么要用一个int的空间去定义?显然是浪费。
但类型提升不是因为用户需求,而是效率需求。short、char、float这些东西是语言对内存操作的不同抽象,是语言的高级特性,但对一个程序的执行效率而言却是有害的,只操作一种类型显然比操作多种类型更方便。类型提升就是提高程序运行效率的措施。
[/Quote]
这样的话,可不可以理解为系统是牺牲空间来换取时间呢?
看来这应该是因为计算机存储空间的不断增加而在C99标准中新加入的吧(仅仅是我的猜测,未求证)
飞天御剑流
2009-10-14
打赏
举报
回复
那么,如果是这样的话,short,char和float 还有什么存在的意义呢?
我们程序员在写程序的时候,直接定义为int 和double不就可以了吗?
----------------------------------------------------------
类型的多样性是为了满足不同用户的需求。我只需要一个char的空间,为什么要用一个int的空间去定义?显然是浪费。
但类型提升不是因为用户需求,而是效率需求。short、char、float这些东西是语言对内存操作的不同抽象,是语言的高级特性,但对一个程序的执行效率而言却是有害的,只操作一种类型显然比操作多种类型更方便。类型提升就是提高程序运行效率的措施。
pang123hui
2009-10-14
打赏
举报
回复
[Quote=引用 6 楼 supermegaboy 的回复:]
原来的类型并没有改变
char a;
int i;
......
i = a + 1;
之后,a的类型并没有改变,而是从a产生一个已提升的临时对象,用该临时对象参与加1运算。但a还是a,类型和空间都没有改变。
[/Quote]
恩,非常感谢回答,谢谢
飞天御剑流
2009-10-14
打赏
举报
回复
原来的类型并没有改变
char a;
int i;
......
i = a + 1;
之后,a的类型并没有改变,而是从a产生一个已提升的临时对象,用该临时对象参与加1运算。但a还是a,类型和空间都没有改变。
mstlq
2009-10-13
打赏
举报
回复
存放的时候……
内存是要钱的……
C语言
运算时类型
自动
转换
及精度损失
问题
C语言
运算时类型
自动
转换
及精度损失
问题
#include<stdio.h> #include<math.h> int main(){ unsigned long long a=0; int i; for(i=0;i<64;i++){ a+=pow(2,i); } unsigned long long b=a/25000; printf("%llu\n",a); printf("%llu",b); ret
[
C语言
]
自动
类型
转换
碰到的
问题
c语言
基础,
自动
类型
转换
的理解
C语言
类型
自动
转换
问题
说明
类型
自动
转换
转换
规则如下 {char, unsigned char, short, unsigned short}->int-> unsigned int->long->unsigned long->float->double 例如一个char型变量a,其值为-1,另一个unsigned char型变量b,将变量a的值赋给变量b,则变量b的值为255 char a; unsigned char b; a = -1; b = a; print
C语言
运算符和表达式——赋值中的
自动
类型
转换
(精度损失
问题
)
两个数量级相差很大的浮点数做加减运算时,数值小的数会受浮点数精度限制而被忽略。为什么long型的123456789不能用float型精确保存呢?*低精度的数据位数比高精度的少,容纳不下高精度的所有信息。数值溢出或损失精度(位数超过7位时)为什么浮点数的输出结果也不准确呢?二进制小数与十进制小数之间并不是。数值溢出(Overflow)截断(Truncation)丢失小数部分(非四舍五入)*反之,一定都是安全的吗?
关于
C语言
运算的
自动
提权及类型
转换
的
问题
先上程序 Test1 = (uTest-4760); Test2 = (uTest-4760)/10; uTest = (uint32_t)(uTest-4760); Test3 = uTest/10; Test4 = 0;
C语言
70,038
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章