2016-04-08 79 views
2

我正在使用pic32mx控制器并使用C32 tooluite v2.02编译器和MPLAB-X IDE v 3.05。 我正在使用long long变量的位操作,但得到了错误的结果。long long long bitwise operation error pic32

int main() 

{ 

    long long data0, data1=0; 

    data0 = 489631651402; 
    data1 = data0 & 0x0FFFFFFFFFF; 

    printf("%llu\n%llu\n", data0, data1); 

    return 0; 
} 

OUTPUT:

489631651402 

    492260348528 

根据计算该结果是错误的。 data0和data1必须相等。

请给我建议这个操作的更好方法。如果在上述程序中有任何错误,请建议正确的路径。

+0

您是否看过生成的汇编代码? –

+3

所以当你按位时它的数量变得更大*而且它是一个常数?嗯...这通常不是很可能。我建议你仔细检查一下,为什么不用十六进制打印数字,使它们稍微容易理解?再加上约阿希姆在他删除的答案中所说的话,不知道为什么这些消失了。 – unwind

+0

我用这段代码看到的唯一问题是使用具有有符号值的'%llu'说明符。我怀疑这会导致这个错误。 – interjay

回答

-1

如果您需要所有位的掩码,请使用ULLONG_MAX作为常量。使用0x0FFFFFFFFFF LL如果您只需屏蔽那些48位

+0

'ULLONG_MAX'总是大于'0x0FFFFFFFFFF'。它的价值不能保证与任何东西相等(只有一个下限),所以不管怎么说都不是一个好主意。 – interjay

+0

正在进行按位AND的对象是长长类型的对象。 – GMichael

+0

我知道这是,但这并不能解释为什么你认为'ULLONG_MAX'是'0x0FFFFFFFFFF'的好替代品。 – interjay