免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: sxsfdx
打印 上一主题 下一主题

[C] C语言中的long型定义(在线等) [复制链接]

论坛徽章:
0
31 [报告]
发表于 2005-09-16 12:59 |只看该作者

C语言中的long型定义(在线等)

我在公司用的是as3 g++编译

论坛徽章:
0
32 [报告]
发表于 2005-09-16 13:35 |只看该作者

C语言中的long型定义(在线等)

一个用的是16位编译器,一个用的是32位编译器,简直是鸡同鸭讲。

论坛徽章:
0
33 [报告]
发表于 2005-09-16 13:46 |只看该作者

C语言中的long型定义(在线等)

是,一直没注意tc

论坛徽章:
0
34 [报告]
发表于 2005-09-16 15:04 |只看该作者

C语言中的long型定义(在线等)

因为在C语言中“+”与“=”都是运算符,而“+”的优先级比“=”高。所以“b=a+1;”首先运算的是“a+1”这一部分,而所有的运算子(也就是加法运算的两个输入)中最“大”的类型是a的类型,即int,所以“a+1”的结果是-1,之后执行“=”运算,即把-1赋给了a
而上面网友的解决方案“b=(long)a+1;”也是这个道理,因为在加法运算中运算子中最大的类型是被强制转换为long型的a,所以加法的结果就成了32768,最后运行赋值运算把32768赋给了b

论坛徽章:
0
35 [报告]
发表于 2005-09-16 15:17 |只看该作者

C语言中的long型定义(在线等)

你那个环境下int是16bit的,你用32767加1,就相当于0111111111111111+1,变成1000000000000000.这样,当然是-32768了.晕啊.

论坛徽章:
0
36 [报告]
发表于 2005-09-16 17:50 |只看该作者

C语言中的long型定义(在线等)

[quote]原帖由 "renstone921"]一个用的是16位编译器,一个用的是32位编译器,简直是鸡同鸭讲。[/quote 发表:


同意。
楼主用vc估计就不会出现最初的问题了。
猜想.....

论坛徽章:
0
37 [报告]
发表于 2005-09-16 21:07 |只看该作者

C语言中的long型定义(在线等)

换个编译器吧
gcc

论坛徽章:
0
38 [报告]
发表于 2005-09-19 11:16 |只看该作者

C语言中的long型定义(在线等)

谢谢大家,这个问题是谭浩强书的一个例子,例子好像是错的。(不过说不定是我编译器的问题)我觉得麻烦着呢,要是以后经常和数字打交道,那岂不是很讨厌这些情况,谢谢大家,我有问题还会再问得。谢谢啦 。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP