标题:c语言程序设计里的一句话,有点晕,整不明白了
只看楼主
核晴核理
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:129
专家分:169
注 册:2012-6-14
结帖率:84.21%
已结贴  问题点数:20 回复次数:10 
c语言程序设计里的一句话,有点晕,整不明白了
例如:假定int类型占16位,long类型占32位,那么,-1L<1U,这是因为unsighed int类型的1U将被提升为signed long类型;但-1L>1UL,这是因为-1L将被提升为unsigned long类型,因而成为一个比较大的正数
搜索更多相关主题的帖子: long 
2012-11-14 11:39
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:2 
我承认 我也没看懂。。
2012-11-14 11:40
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
得分:2 
是不是楼主没发全啊,看着迷糊

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-11-14 12:00
核晴核理
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:129
专家分:169
注 册:2012-6-14
得分:0 
回复 2楼 zklhp
哎,无语问苍天,难道是错的?我对了两遍,跟书上一个字不差,网上下的c语言程序设计,就是那本号称c语言圣经的书,
2012-11-14 12:40
核晴核理
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:129
专家分:169
注 册:2012-6-14
得分:0 
回复 3楼 yaobao
麻烦您再给看看,上面发了一张截图,整个自然段都截上去了
2012-11-14 12:42
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:16 
指的是这样两种数据混在同一个表达式进行运算的时候,就会出现这种情况。

授人以渔,不授人以鱼。
2012-11-14 12:42
核晴核理
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:129
专家分:169
注 册:2012-6-14
得分:0 
回复 6楼 TonyDeng
感觉有点门道了,可是为什么第一个关系式是无符号转换成有符号,而第二个关系表达式是有符号转换成无符号呢?这个转换是按照怎么一个规律来的?
2012-11-14 12:58
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
这本书的翻译很烂,网上下载的电子版?

数据类型在运算表达式中的提升,按语言规则是向兼容性的高处提。比如如下代码:
unsigned int a = -1U;
long b = 1L;
if (a > b)
{
}
在if()比较中,就要考虑数据类型的差异了。此处,a将会被提升为long来运算,而假如你书写的a=-1U,它其实是最大正值的int,此时,a>b为真。正常的代码编制,程序员是不会写a=-1U或-1UL这种形式的,自己定义的a是unsigned型,偏要写出负数,那是自取麻烦,抽自己的嘴巴。比较隐蔽的错误,是在非字面值的情况下,比如a的结果是运算出来的,你在别处算出负值,把它赋给a进行运算,此时就很可能没意识到a的值已经不再是负值,而是正值。

通常的编程指南,告诫程序员尽量使用普通有符号的signed型数据,不要乱用unsigned,就是这个道理。这有两个原因,一个是上面所说的问题,第二个是可移植性问题,当你用C为别的语言提供函数库时,要注意某些语言是不支持unsigned这种数据的。unsigned int,在作右移位运算时能够保证无错,在这个时候使用就很好,否则,少用为佳。在逻辑上,对于可确认必须是正数的数据,可以设定为unsigned型,但自己要保证不要把负数赋值给它。

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

授人以渔,不授人以鱼。
2012-11-14 13:14
核晴核理
Rank: 3Rank: 3
来 自:北京
等 级:论坛游侠
帖 子:129
专家分:169
注 册:2012-6-14
得分:0 
回复 8楼 TonyDeng
明白了,谢tony版
嗯,网上下的电子版,我英文不好,人家推荐看英文原版的,这个我估计没戏了,是说这本书只翻译了这一个版本吗?还是有更好的版本?或者还有涉及面比较广讲的相对比较深入的教材吗?帮我推荐一本呗。
2012-11-14 13:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
我看它原文也是那样的,但其实涉及上下文理解的问题。单看这一段,会有你的这种误解,那翻译也不管译出来有没有问题,就直译。不关什么书深入的事,其实读哪本书都差不多,关键是阅读要仔细。

授人以渔,不授人以鱼。
2012-11-14 13:29



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




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

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