标题:长短整形问题
只看楼主
维他命Q
Rank: 1
等 级:新手上路
帖 子:21
专家分:7
注 册:2012-1-12
得分:0 
回复 9楼 xiestone1992



这个意味着???
2012-02-13 20:46
维他命Q
Rank: 1
等 级:新手上路
帖 子:21
专家分:7
注 册:2012-1-12
得分:0 
回复 17楼 TonyDeng
加个%u竟然可以了,我看的是谭浩强第三版,那里说long的范围-2147483648~2147483647 ,加unsigned可以到4294967294。也说了按机子分类,但只说short 和int不同机子可能不同 ,而long 都一样。我这部电脑32位,我想可以到4294967294吧!结果%u可以,%d或者%ld不可以。
2012-02-13 20:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:6 
int到底有多少容量,與機器和編譯器有關,舊編譯器固然跟舊機器一起,但新編譯器也可以有自己不同的處理辦法,不是全部一樣的。一般地,int保證覆蓋16位那個取值範圍(即最少16位),但具體實現是不限的,可能是32位,甚至也可能是64位,這與編譯器做編譯時的方便和優化手段有關。在VC中,設置int是32位的,long int也是32位的,也就是說,int與long是一樣的。

C標準並沒有規定帶符號的數據應該用什麼形式表示,允許編譯器自由發揮,但一般上大家的措施都一致,選用最高位為1表示負數(但不是說必然永遠如此的),那樣,對帶符號的數據來說,32位的int實際上只有31位可用(即2的31次方),而不需要考慮符號時就可以把32位全部用完(即2的32次方)。

[ 本帖最后由 TonyDeng 于 2012-2-13 21:23 编辑 ]

授人以渔,不授人以鱼。
2012-02-13 21:16
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:2 
c 标准只是说 int 是介于 short 和 long 之间。不会比 long 长。不过确实,int 的长度没有硬性规定。

至于楼主问的,输出所谓 %u, %d 的问题,那只是输出的时候显示着有所区别,数据本身是一样的。
你给个 int 过去也可以用 %f 来输出,乱七八糟的而已,没什么意思。同样,int 过去用 %u, unsigned 过去用 %d 一样应该看成是乱七八糟的数据。
只不过,int 和 unsigned 之间有一大堆整型提升(integral promotion)的规则在约束,编译器不一定给警告就是了。
2012-02-13 22:20
snakelazixp
Rank: 2
等 级:论坛游民
帖 子:51
专家分:94
注 册:2012-2-13
得分:2 
格式控制符错了,用%u输出。。。。。。。
2012-02-13 22:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-360635-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022104 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved