我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019跑狗图高清彩图 > 整型常量 >

为什么C语言整型常量十进制形式的类型与八进制、十六的不一样?

归档日期:07-27       文本归类:整型常量      文章编辑:爱尚语录

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部C语言标准对整型常量的类型有这样的描述:如果没有后缀且是十进制形式的,那么它的类型根据其值的大小可能为int、long、unsigned long;如果为没有后缀且是八进制或十六进制的,根据值的大小可能为int、unsigned int、long、unsigned long。

  我想问,对于十进制形式的整型常量的类型为什么不经过unsigned int,直接从int跳到long;按理说它应该像八进制与十六进制一样,从小到大逐一遍历选取。

  这个问题可以算勉强解决了:为什么十进制形式不遍历unsigned int,它的类型遍历是从int、long再到unsigned long;在此总结多日来查阅参考得出的可能最主要的原因:(减少在移植时出问题)

  首先,当无符号类型与长度相同的有符号类型一起运算时,其结果类型对C语言来说是无法预料的,也就是说结果的类型将有具体的实现;为什么呢?是这样的:

  C语言规定:较长类型的整数至少要占有较短类型整数一样的空间,但它们可以占有一样大小的空间,这取决于具体的实现。

  因此当无符号类型与有符号类型运算时,比如,unsigned int与long int,当它们被规定为长度相同,那么结果是什么类型,仅从语法上来说,不能确定结果的类型,因为不知道一个unsigned int的数long int能不能装的下,如果装的下则在类型转换时将unsigned int转换成long int,结果类型为long int,装不下则将long int、unsigned int转换unsigned long int,结果类型为unsigned long int,所以在考虑到移植性时,应尽可能的用有符号类型int、long,这样不管在哪种环境下,实现在语言中就可以确定其类型,而且无符号类型的表数范围大于有符号类型,在运算中一般要将有符号类型转换成无符号类型,而这种转换要比反向转换复杂的多,占用更多的计算时间,显然选用unsigned int的弊大于不用unsigned int,不选用unsigned int的利大于选用unsigned int。

  语言设计者,在考虑到C程序的空间利用率、时间效率、移植性,作出一个好的折中(在设计领域有句话:一个好的设计取决于一个好的折中):

  在尽量减少空间浪费的情况下,提高程序的运行效率和通用性。而这两点对于任何程序来说都是衡量的最主要标准。而空间可以在物理上扩大,这是必然趋势,效率与通用性则只能在程序中提高,虽然也可以提供更快的处理器,但这显然是种鲁莽的想法。

本文链接:http://textandcandy.com/zhengxingchangliang/339.html