qingkongyipian 发表于 2007-2-13 17:54:31

linux下编程。

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的位数据,怎么能得到那?谢谢大家。

antzcn 发表于 2007-2-14 09:26:33

i=((typeof(i))256)*256*256*255

if you do like this:
i=256*256*256*255
there is a typecast from signed int to long long.

loveccy 发表于 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' 。

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

romezxy 发表于 2007-3-9 22:41:40

楼上的强
页: [1]
查看完整版本: linux下编程。