2007年8月3日 星期五

Bitwise運算的限制

今天為了寫幾個API,並為了作資料動態長度的判別,因而使用到Bitwise的運算,以便檢測資料的長度,然而確一而在地發生錯誤,經反複測試及確認,原來Bitwise的運算不可以運用於"long long"型別的變數,僅可以適用於"char"/"short"/"int"/"long"幾種型別;因此,為了解決動態資料長度的判斷,改以Bit Shift的方式來解決。
(Data >> 32) > 0 ===> 8 bytes
(Data >> 16) > 0 ===> 4 bytes
(Data >> 8) > 0 ===> 2 bytes
(Data >> 0) > 0 ===> 1 bytes

3 則留言:

Black 提到...

所以 Data 不可以是 0, 或是要先用 0xFFFFFFFF 放入 Data 來測試呢?

Danny 提到...

0也是一個數值,基本上我在進行資料的處理時,仍會使用一個byte的長度來儲存這個數值,所以不需要先初始化資料為0xFFFFFFFF!

Black 提到...

我的意思是: 0 可能是 1,2,4,8 byte, 右移之後仍是 0, 如何區分它的型別呢?