我有一个指针指向一个字节缓冲区,我将每个偶数索引字节复制到一个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