2016-04-08 114 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