关于C语言自动转换的问题

pang123hui 2009-10-13 11:54:57
今天在看一本C语言书时,看到这么一句话,是关于数值类型自动转换的,

即当遇到short ,char时,系统一律将其转换为int 参与运算

当遇到float时,系统一律将其转换为 double参与运算

那么,如果是这样的话,short,char和float 还有什么存在的意义呢?

我们程序员在写程序的时候,直接定义为int 和double不就可以了吗?

感谢回答
...全文
68 7 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
存放的时候……
内存是要钱的……

69,380

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧