C语言longlong类型内存中存储方式

longlong类型是怎么存储的,32位情况下,我用按位与的方法得到的64位值不对

我按位与没问题啊。

#include<stdio.h>
int main()
{
    long long n1,n2,n3;
    n1=4294967295;//1111 1111,1111 1111,1111 1111,1111,1111
    n2=4294967294;//1111 1111,1111 1111,1111 1111,1111,1110
    printf("long long型大小为%d位\n",sizeof(n1)*8);
    printf("1111 1111,1111 1111,1111 1111,1111,1111(十进制4294967295)\n");
    printf("按位与\n");
    printf("1111 1111,1111 1111,1111 1111,1111,1110(十进制4294967294)\n");
    printf("=%I64d",n1&n2);
    return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-02-25
就是用4个字节存低四位,4个字节存高四位啊……追问

好像没这么简单,我赋值3,低四字节是,0000……0011,问题是高四字节也是这个值

第2个回答  2015-02-25

看了你在楼上的追问, 不知道你怎么确定的. 以下程序

#include <stdio.h>
int main()
{
    long long x = 3LL;
    unsigned char* p = (unsigned char*) &x;
    unsigned i;
    for (i = 0; i < sizeof(long long); ++i) {
        printf("%d ", *(p + i));
    }
    printf("\n");
    return 0;
}

在 x86 机器上运行结果为

 

3 0 0 0 0 0 0 0

本回答被网友采纳