找回密码
 注册
查看: 2220|回复: 3

linux下编程。

[复制链接]
发表于 2007-2-13 17:54:31 | 显示全部楼层 |阅读模式
linux下编程。  
   
我写了下面一段程序:   
main()   
{   
long long i;   
i=256*256*256*255;   
printf("%d\n",i);   
}   

编译:   
gcc3 -o test test.c   

warning: integr overflow in expression   

好像长度不够,改为double仍然不可以,但我就是需要32的位数据,怎么能得到那?谢谢大家。
发表于 2007-2-14 09:26:33 | 显示全部楼层
i=((typeof(i))256)*256*256*255

if you do like this:
[code:1]i=256*256*256*255[/code:1]
there is a typecast from signed int to long long.
回复

使用道具 举报

发表于 2007-2-14 12:33:27 | 显示全部楼层
C 语言真是有的学。

这跟变量 i 的类型没关系。只要 `256*256*256*255‘ 这么一句就出那个警告。因为立即数 256 是 `signed int‘ 类型的,算完乘法就溢出了。

表示整型常量时,可以在后边加上修饰,比如 `256u’ 表示无符号的整型,`256l‘ 或 `256L’ 表示长整型,两个 L 就是 long long 类型了。还有浮点型的数据,`256.0‘ 是双精度浮点数,`256.0f’ 就是单精度的了。写法上就差一两个字符,其实差远了,不能指望着编译器去做类型转换,得一开始就人工安排好。

要是确定就是 32 位的数据的话,可以用无符号的整型啊,只要在 `256*256*256*255‘ 里边任意一个数后边加上一个 `u’ 就行了,不用都加上。无符号整型和有符号整型混合运算时,都先转换成无符号的,算出来的结果也是无符号的了。也可以用长长整型,只要在任意一个数后边加上 `ll‘ 或 `LL’ 就行了。

用 printf 输出时也得注意啊,`%d‘ 是输出 `int’ 类型的变量的值。无符号类型的得用 `%u’,长整型的得在前边加上 `l',长长整型的得加上 `ll' 。

……奇怪,我怎么老是觉着哪儿说错了像的。变量类型这块儿细节太多了,一不注意就出错儿。我可不敢保证我说的都对啊。咱们还是天天看手册比较好,呵呵。
回复

使用道具 举报

发表于 2007-3-9 22:41:40 | 显示全部楼层
楼上的强
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-5-18 06:49 , Processed in 0.021687 second(s), 16 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表