我有一個指針指向一個字節緩衝區,我將每個偶數索引字節複製到一個int中(因爲數據存儲到緩衝區的協議我知道奇數週期用於讀取)。 現在,當我做到這一點C如何處理符號擴展?
signed int a;
...
//inside a loop
a = buffer[2*i]; //buffer is unsigned
它給了我一個無符號數。但是,當我這樣做
a = (int8_t)buffer[2*i]
該號碼以簽署的形式呈現。這迫使我重新思考在c工作中如何進行簽名擴展,特別是在上述情況下。 我的理解是,自從我聲明爲有符號時,編譯器會自動做符號擴展。任何人都可以花一些時間來解釋爲什麼事實並非如此。我剛剛在這個陷阱裏呆了一個小時,不想再次陷入同一陷阱。
好閱讀http://www.cs.umd.edu/class/sum2003/cmsc311/Notes /Data/signExt.html –
我知道C中符號擴展是如何工作的,但是在你有一個無符號數的情況下(但是「符號位」是1),並且你通過強制轉換爲更長的整數來擴展符號,那麼如何處理?對不起,如果這不清楚的問題。 – as3rdaccount