QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 765|回复: 3

求救:关于long long 的问题!

[复制链接]
发表于 2003-10-25 14:15:14 | 显示全部楼层 |阅读模式
各位高手:小弟写了一段很小的程序测试用,代码如下:
#include <stdio.h>
#include <string.h>
main()
{
    unsigned  long long mask;
    unsigned  long long val;
    char c[4];
    mask = 255;
    val = 3;

    printf("Output use lld : val = %lld,mask = %lld\n",val,mask);

    printf("Output use 2x : val = %2x,mask = %2x\n",val,mask);
    printf("Output use 2x : mask = %2x,val = %2x\n",mask,val);
    printf("mask = %2x\n",mask);
    printf("val = %2x\n",val);

    printf("%2x\n",(mask & val));

    memset(c,0,4);
    sprintf(c,"%2x",(mask & val));
    printf("%s\n",c);
}

x86平台下,gcc编译运行,结果如下:
Output use lld : val = 3,mask = 255
Output use 2x : val =  3,mask =  0
Output use 2x : mask = ff,val =  0
mask = ff
val =  3
3
3

PowerPC平台下,gcc编译运行,结果如下:
Output use lld : val = 3,mask = 255
Output use 2x : val = 30013000,mask =  0
Output use 2x : mask = 30013000,val =  0
mask = 30013000
val = 30013000
30013000
0
均不能完全正确。
不知什么原因,但是如果使用long或者int代替long long 定义,就没有问题。
各位高手指教一二啊!
小弟谢了,先!
发表于 2003-10-25 19:42:02 | 显示全部楼层
改成int的结果:

Output use lld : val = 1095216660483,mask = 4611904134181061257
Output use x : val = 3,mask = ff
Output use x : mask = ff,val = 3
mask = ff
val =  3
3
3

书里说 %ld 用于长整型,不知能不能用于long long .
i686 里long 和int都是4byte,long long是8byte
回复

使用道具 举报

发表于 2003-10-25 19:59:39 | 显示全部楼层
#include <stdio.h>
main()
{
long long a,b;
a=255;
b=3;
printf("%2x   %2x\n",a,b);
}

#./test3
ff    0

x86-32应该是把long long分成两个long来运算,printf也许因此出问题.
进行64位运算最好用64位机器的long来搞吧.
回复

使用道具 举报

 楼主| 发表于 2003-10-27 11:56:03 | 显示全部楼层
十分感谢
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-13 04:01 , Processed in 0.059128 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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