2007年8月21日 星期二

一個強制型別轉換與運算子優先性的有趣問題?

請問下列result與result1的值分別是多少?
Ex:
char data = 0xC1;
int result = 0, result1 = 0;

result = (int)(data);
result1 = (int)(data & 0xFF);
.
.
.
.
.
.
答案是result = -63, result = 193
您知道為什麼嗎?

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